44323
2024-04-23 16b704d18a875d1fb63827aaa507790ba2bef5be
JK最终代码提交
163个文件已删除
439个文件已添加
90个文件已修改
43530 ■■■■■ 已修改文件
.idea/compiler.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/encodings.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/misc.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/uiDesigner.xml 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/pom.xml 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/config/web/BeetlConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/core/aop/GlobalExceptionHandler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/core/beetl/ShiroExt.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/core/common/constant/factory/ConstantFactory.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/core/log/factory/LogTaskFactory.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/core/tag/DictSelectorTag.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/core/util/ApiMenuFilter.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/ApiController.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/AppUserController.java 1063 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/BannerController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/EncyclopedicKnowledgeController.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/FileController.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/FindController.java 700 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/HouseResourceController.java 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/HousingDemandController.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/RegionController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/SportsController.java 2259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserController.java 1731 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/code/controller/CodeController.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/file/OSSConfig.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/file/OSSService.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DeptController.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DictController.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/KaptchaController.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginLogController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/MenuController.java 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/NoticeController.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/RoleController.java 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/SysRegionController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UEditorController.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java 395 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppUserMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/BannerMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHouseResourceMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHousingDemandMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CouponClockMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CouponMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CouponReceiveMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CourseMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CourseVideoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DeviceLoginMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeUpvoteMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedBackMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FindCommentMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FindMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FindReportMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessPositionMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessTypeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HouseResourceMapper.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HouseTypeMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandDistrictMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandMapper.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/InviteMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LikeMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginHistoryMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MessageMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCourseMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PackageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ProtocolMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RecipientMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RedPackageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHouseResourceMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHousingDemandMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SearchHistoryConditionMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysDataTypeMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysSetMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UseGuideMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserCollectMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserRecordMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserWatchMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppUserMapper.xml 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BannerMapper.xml 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHouseResourceMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHousingDemandMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponClockMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponReceiveMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseMapper.xml 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseVideoMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeviceLoginMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeUpvoteMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedBackMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindCommentMapper.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindReportMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessPositionMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessTypeMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseResourceMapper.xml 527 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseTypeMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandDistrictMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandMapper.xml 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InviteMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LikeMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginHistoryMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MessageMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCourseMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PackageMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PageMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProtocolMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RecipientMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPackageMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHouseResourceMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHousingDemandMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SearchHistoryConditionMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysDataTypeMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysSetMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UseGuideMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCollectMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRecordMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserWatchMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/AddAppUserVo.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/AddFindDTO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/AddUserWatchDTO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/ArrdessDTO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/BannerVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/CommentQuery.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/CourseQuery.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/FeedBackVo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/FindQuery.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/Host.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/LoginWeChatDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/Medium.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/Node.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/THouseResource.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/TreeBean.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/UpdateAppUserDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppUser.java 229 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppUserDTO.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AuthDTO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Banner.java 161 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHouseResource.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHousingDemand.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Coupon.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CouponClock.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CouponReceive.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Course.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CourseVideo.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DeviceLogin.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dict.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledge.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledgeUpvote.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FeedBack.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Find.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FindComment.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FindReport.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FitnessPosition.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FitnessType.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HouseResource.java 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HouseType.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemand.java 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemandDistrict.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invite.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Like.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Login.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/LoginHistory.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Message.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Order.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCourse.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Package.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Page.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Protocol.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Recharge.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Recipient.java 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RedPackage.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Region.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RegionVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReportHouseResource.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReportHousingDemand.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SearchHistoryCondition.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysDataType.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysSet.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UseGuide.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserCollect.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserRecord.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserWatch.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAppUserService.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IBannerService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHouseResourceService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHousingDemandService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICouponClockService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICouponReceiveService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICouponService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICourseService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICourseVideoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDeviceLoginService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDictService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeService.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeUpvoteService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedBackService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFindCommentService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFindReportService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFindService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessPositionService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessTypeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHouseResourceService.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHouseTypeService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandDistrictService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandService.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IInviteService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILikeService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginHistoryService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMessageService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCourseService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPackageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IProtocolService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRecipientService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRedPackageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReportHouseResourceService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReportHousingDemandService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISearchHistoryConditionService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysDataTypeService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysSetService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUseGuideService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserCollectService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserRecordService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserWatchService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java 615 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/BannerServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHouseResourceServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHousingDemandServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponClockServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponReceiveServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseVideoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeviceLoginServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeServiceImpl.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeUpvoteServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedBackServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindCommentServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindReportServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessPositionServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessTypeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java 690 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseTypeServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandDistrictServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandServiceImpl.java 591 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InviteServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LikeServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginHistoryServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MessageServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCourseServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PackageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProtocolServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RecipientServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPackageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHouseResourceServiceImpl.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHousingDemandServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SearchHistoryConditionServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysDataTypeServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysSetServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UseGuideServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCollectServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRecordServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserWatchServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ApplePayUtil.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AuditUtil.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AuditVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Constant.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HWSendSms.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpRequestUtil.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/IosVerifyUtil.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5AndKL.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PasswordUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java 1275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ResultUtil.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UploadVideoUtil.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/httpClinet/HttpClientUtil.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/task/MyScheduledTask.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BMIVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BaseWarpper.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BuyDetailVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CommentVO.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CompeleteVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/ConstellationVO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CouponQuery.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CouponVO.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseDetailVO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseList.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseVO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/DifficultyVO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/FindVO.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/MessageQuery.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/MessagesVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/PackageListVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/PaySuccessVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/PeopleListVO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/ProtocolVO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/SearchList.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/StartTrainVO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/StartVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/UserDetailVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/UserInfoVO.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WXLoginVO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WalletVO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WeightVO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WithdtawalVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DeptWarpper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DictWarpper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LogWarpper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/NoticeWrapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/PointLocation.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RoleWarpper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserWarpper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/AddHouseReq.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/HousingDemandReq.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/SearchHouseResourceReq.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/UpdateAppUser.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/UserInfoDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/res/CollectListRes.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/res/HousingDemandInfoRes.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/res/SearchIntermediaryListRes.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/resources/application-dev.yml 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/webapp/WEB-INF/view/system/sysDict/sysDict.html 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/webapp/WEB-INF/view/system/sysDict/sysDict_add.html 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/webapp/WEB-INF/view/system/sysDict/sysDict_edit.html 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/webapp/static/modular/system/sysDict/sysDict.js 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/webapp/static/modular/system/sysDict/sysDict_info.js 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-core/pom.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-core/src/main/java/com/stylefeng/guns/core/util/MD5Util.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/GunsGeneratorConfig.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/.idea/$PRODUCT_WORKSPACE_FILE$ 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/.idea/.gitignore 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/.idea/guns-management.iml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/.idea/misc.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/.idea/modules.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/.idea/vcs.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/pom.xml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/config/OSSConfig.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/config/OSSService.java 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/core/util/HttpUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/AppUserController.java 510 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/BannerController.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/CouponController.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/CourseController.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/FeedbackController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/FindController.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/FitnessController.java 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/HostController.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/HouseController.java 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/MediumController.java 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/MoneyController.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/OrderController.java 820 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/OssController.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/ReportController.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysBannerController.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysDeptController.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysRoleController.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SystemController.java 292 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/UserController.java 265 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/controller/SysRegionController.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/AppUserMapper.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/BannerMapper.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHouseResourceMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHousingDemandMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CouponMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CouponReceiveMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CourseMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CourseVideoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/DeptMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeUpvoteMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FeedBackMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FindCommentMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FindMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FindReportMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessPositionMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessTypeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HouseResourceMapper.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HouseTypeMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandDistrictMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandMapper.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/InviteMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/LoginHistoryMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/MessageMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCourseMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/OrderMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/PackageMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/PageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/ProtocolMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/RecipientMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/RedPackageMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHouseResourceMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHousingDemandMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/SearchHistoryConditionMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/SysSetMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/TAppUserAuditRecordMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/TurnMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UpdateSetMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UseGuideMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UserCollectMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UserMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UserRecordMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppUserMapper.xml 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BannerMapper.xml 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHouseResourceMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHousingDemandMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponMapper.xml 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponReceiveMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseMapper.xml 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseVideoMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeptMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeUpvoteMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedBackMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindCommentMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindMapper.xml 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindReportMapper.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessPositionMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessTypeMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseResourceMapper.xml 475 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseTypeMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandDistrictMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandMapper.xml 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InviteMapper.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginHistoryMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MessageMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCourseMapper.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderMapper.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PackageMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PageMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProtocolMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RecipientMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPackageMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHouseResourceMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHousingDemandMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SearchHistoryConditionMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysSetMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TurnMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UpdateSetMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UseGuideMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCollectMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRecordMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/AggrementDTO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/AgreementDTO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/AppUserQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/BalanceQuery.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/CourseDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/CourseQuery.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/DeptQuery.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FeedbackQuery.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FindCommentQuery.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FindQuery.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FindReportQuery.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FitnessPositionQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/OSQuery.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/OrderQuery.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/TeamQuery.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/TreeBean.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/UseGuidDTO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/UserDto.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/AppUser.java 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Banner.java 161 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHouseResource.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHousingDemand.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Coupon.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CouponReceive.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Course.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CourseVideo.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Dept.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledge.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledgeUpvote.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FeedBack.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Find.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FindComment.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FindReport.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FitnessPosition.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FitnessType.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HouseResource.java 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HouseType.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemand.java 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemandDistrict.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Invite.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/LoginHistory.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Message.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/MoneyVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Order.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/OrderCourse.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Package.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Page.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Protocol.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Recharge.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Recipient.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/RedPackage.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Region.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/ReportHouseResource.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/ReportHousingDemand.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Role.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/SearchHistoryCondition.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/SysSet.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/TAppUserAuditRecord.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Turn.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UpdateSet.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UseGuide.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/User.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UserCollect.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UserRecord.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IAppUserService.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IBannerService.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHouseResourceService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHousingDemandService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICouponReceiveService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICouponService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICourseService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICourseVideoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IDeptService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeService.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeUpvoteService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFeedBackService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFindCommentService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFindReportService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFindService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessPositionService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessTypeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHouseResourceService.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHouseTypeService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandDistrictService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IInviteService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ILoginHistoryService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IMessageService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCourseService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IPackageService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IPageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IProtocolService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IRecipientService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IRedPackageService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IReportHouseResourceService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IReportHousingDemandService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ISearchHistoryConditionService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ISysSetService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ITurnService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUpdateSetService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUseGuideService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUserCollectService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUserRecordService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUserService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/TAppUserAuditRecordService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/BannerServiceImpl.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHouseResourceServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHousingDemandServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponReceiveServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseVideoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeptServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeServiceImpl.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeUpvoteServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedBackServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindCommentServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindReportServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessPositionServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessTypeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java 555 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseTypeServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandDistrictServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandServiceImpl.java 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/InviteServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginHistoryServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/MessageServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCourseServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/PackageServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/PageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProtocolServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/RecipientServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPackageServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHouseResourceServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHousingDemandServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/SearchHistoryConditionServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysSetServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAppUserAuditRecordServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/TurnServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UpdateSetServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UseGuideServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCollectServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRecordServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/transfer/UserDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/Constant.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/DateUtils.java 467 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/FileUtil.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/HWSendSms.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/MyScheduledTasks.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/ObsUploadUtil.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/Page.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/util/UploadVideoUtil.java 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/AppUserDetailVO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/AppUserVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/BMIVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/BalanceDetailVO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CSVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CommentVO.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CompeleteVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/ConstellationVO.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouPonQuery.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouponListVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouponReceiveVO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouponVO.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CourseDetailVO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CourseList.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/DeptVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FeedbackVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FindReportDetailVO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FindReportVO.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FindVO.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FitnessPositionVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/InviteUserVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/MessageQuery.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/MessagesVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/MoneyDetailVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/OperationalDataVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/OrderDetailVO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/OrderListVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/PackageDetailVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/PackageVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/RechargeListVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/RedPackageVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/SearchList.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/SystemSetVO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/TeamDetailVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/TeamVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/UserDetailVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/UserInfoVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/WalletVO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/WithdtawalVO.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/java/com/stylefeng/guns/modular/system/warpper/PointLocation.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/resources/application-dev.yml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-management/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/compiler.xml
@@ -2,12 +2,13 @@
<project version="4">
  <component name="CompilerConfiguration">
    <annotationProcessing>
      <profile default="true" name="Default" enabled="true" />
      <profile name="Maven default annotation processors profile" enabled="true">
        <sourceOutputDir name="target/generated-sources/annotations" />
        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
        <outputRelativeToContentRoot value="true" />
        <module name="guns-generator" />
        <module name="guns-admin" />
        <module name="guns-generator" />
        <module name="guns-core" />
        <module name="guns-management" />
      </profile>
.idea/encodings.xml
@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding">
    <file url="file://$PROJECT_DIR$" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-admin" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-admin/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-core" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-core/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-generator" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-generator/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-management" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/guns-management/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
  </component>
</project>
.idea/misc.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ExternalStorageConfigurationManager" enabled="true" />
  <component name="FrameworkDetectionExcludesConfiguration">
    <file type="web" url="file://$PROJECT_DIR$/guns-admin" />
  </component>
  <component name="JavaScriptSettings">
    <option name="languageLevel" value="ES6" />
  </component>
  <component name="MavenProjectsManager">
    <option name="originalFiles">
      <list>
@@ -7,5 +14,5 @@
      </list>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" project-jdk-name="corretto-1.8" project-jdk-type="JavaSDK" />
  <component name="ProjectRootManager" version="2" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>
.idea/uiDesigner.xml
New file
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Palette2">
    <group name="Swing">
      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
      </item>
      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
      </item>
      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
        <initial-values>
          <property name="text" value="Button" />
        </initial-values>
      </item>
      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="RadioButton" />
        </initial-values>
      </item>
      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="CheckBox" />
        </initial-values>
      </item>
      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="Label" />
        </initial-values>
      </item>
      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
          <preferred-size width="200" height="200" />
        </default-constraints>
      </item>
      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
          <preferred-size width="200" height="200" />
        </default-constraints>
      </item>
      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
      </item>
      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
          <preferred-size width="-1" height="20" />
        </default-constraints>
      </item>
      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
      </item>
      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
      </item>
    </group>
  </component>
</project>
guns-admin/pom.xml
@@ -16,9 +16,48 @@
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>com.huaweicloud</groupId>
            <artifactId>esdk-obs-java-bundle</artifactId>
            <version>3.23.9</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.huaweicloud.sdk</groupId>-->
<!--            <artifactId>huaweicloud-sdk-iam</artifactId>-->
<!--            <version>3.1.88</version>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>com.huaweicloud.sdk</groupId>-->
<!--            <artifactId>huaweicloud-sdk-moderation</artifactId>-->
<!--            <version>3.1.87</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.huaweicloud.sdk</groupId>
            <artifactId>huaweicloud-sdk-bundle</artifactId>
            <version>3.1.87</version>
        </dependency>
        <dependency>
            <groupId>com.huawei.apigateway</groupId>
            <artifactId>java-sdk-core</artifactId>
            <version>3.2.5</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/java-sdk-core-3.2.5.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.mindrot</groupId>
            <artifactId>jbcrypt</artifactId>
            <version>0.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.38.10.ALL</version>
        </dependency>
        <dependency>
            <groupId>com.stylefeng</groupId>
@@ -45,6 +84,10 @@
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
@@ -182,11 +225,7 @@
            <artifactId>poi-ooxml</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
@@ -227,11 +266,7 @@
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
        <dependency>
            <!-- jsoup HTML parser library @ https://jsoup.org/ -->
            <groupId>org.jsoup</groupId>
@@ -260,10 +295,7 @@
            <artifactId>emoji-java</artifactId>
            <version>5.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    </dependencies>
    <build>
guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java
@@ -6,7 +6,6 @@
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@@ -32,7 +31,12 @@
    private final static Logger logger = LoggerFactory.getLogger(GunsApplication.class);
    public static void main(String[] args) {
        SpringApplication.run(GunsApplication.class, args);
        try {
            SpringApplication.run(GunsApplication.class, args);
        }catch (Exception e){
            e.printStackTrace();
            System.err.println();
        }
        logger.info("GunsApplication is success!");
    }
guns-admin/src/main/java/com/stylefeng/guns/config/web/BeetlConfig.java
@@ -5,7 +5,6 @@
import org.beetl.core.resource.ClasspathResourceLoader;
import org.beetl.ext.spring.BeetlSpringViewResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
@@ -5,7 +5,6 @@
import com.stylefeng.guns.core.shiro.ShiroDbRealm;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
guns-admin/src/main/java/com/stylefeng/guns/core/aop/GlobalExceptionHandler.java
@@ -1,8 +1,8 @@
package com.stylefeng.guns.core.aop;
import com.stylefeng.guns.core.base.tips.ErrorTip;
import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
import com.stylefeng.guns.core.common.exception.InvalidKaptchaException;
import com.stylefeng.guns.core.base.tips.ErrorTip;
import com.stylefeng.guns.core.exception.GunsException;
import com.stylefeng.guns.core.log.LogManager;
import com.stylefeng.guns.core.log.factory.LogTaskFactory;
guns-admin/src/main/java/com/stylefeng/guns/core/beetl/ShiroExt.java
@@ -15,11 +15,10 @@
 */
package com.stylefeng.guns.core.beetl;
import com.stylefeng.guns.core.shiro.ShiroUser;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.beetl.core.GroupTemplate;
import com.stylefeng.guns.core.shiro.ShiroUser;
public class ShiroExt {
    private static final String NAMES_DELIMETER = ",";
guns-admin/src/main/java/com/stylefeng/guns/core/common/constant/factory/ConstantFactory.java
@@ -6,13 +6,13 @@
import com.stylefeng.guns.core.common.constant.cache.CacheKey;
import com.stylefeng.guns.core.common.constant.state.ManagerStatus;
import com.stylefeng.guns.core.common.constant.state.MenuStatus;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.core.log.LogObjectHolder;
import com.stylefeng.guns.core.support.StrKit;
import com.stylefeng.guns.core.util.Convert;
import com.stylefeng.guns.core.util.SpringContextHolder;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
guns-admin/src/main/java/com/stylefeng/guns/core/log/factory/LogTaskFactory.java
@@ -2,13 +2,13 @@
import com.stylefeng.guns.core.common.constant.state.LogSucceed;
import com.stylefeng.guns.core.common.constant.state.LogType;
import com.stylefeng.guns.core.db.Db;
import com.stylefeng.guns.core.log.LogManager;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.LoginLogMapper;
import com.stylefeng.guns.modular.system.dao.OperationLogMapper;
import com.stylefeng.guns.modular.system.model.LoginLog;
import com.stylefeng.guns.modular.system.model.OperationLog;
import com.stylefeng.guns.core.db.Db;
import com.stylefeng.guns.core.log.LogManager;
import com.stylefeng.guns.core.util.ToolUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
guns-admin/src/main/java/com/stylefeng/guns/core/tag/DictSelectorTag.java
@@ -9,6 +9,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.List;
import java.util.Map;
guns-admin/src/main/java/com/stylefeng/guns/core/util/ApiMenuFilter.java
@@ -1,7 +1,7 @@
package com.stylefeng.guns.core.util;
import com.stylefeng.guns.core.common.constant.Const;
import com.stylefeng.guns.config.properties.GunsProperties;
import com.stylefeng.guns.core.common.constant.Const;
import com.stylefeng.guns.core.node.MenuNode;
import java.util.ArrayList;
guns-admin/src/main/java/com/stylefeng/guns/modular/api/ApiController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/api/AppUserController.java
@@ -1,376 +1,827 @@
package com.stylefeng.guns.modular.api;
import com.alibaba.druid.sql.visitor.functions.If;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.huaweicloud.sdk.core.exception.SdkErrorMessage;
import com.stylefeng.guns.core.util.JwtTokenUtil;
import com.stylefeng.guns.core.util.MD5Util;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dto.AddAppUserVo;
import com.stylefeng.guns.modular.system.dto.LoginWeChatDTO;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.model.Page;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.service.impl.FeedBackServiceImpl;
import com.stylefeng.guns.modular.system.service.impl.HouseTypeServiceImpl;
import com.stylefeng.guns.modular.system.util.HttpUtils;
import com.stylefeng.guns.modular.system.util.Page;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.warpper.req.*;
import com.stylefeng.guns.modular.system.warpper.res.AppletLoginRes;
import com.stylefeng.guns.modular.system.warpper.res.CollectRes;
import com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryRes;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.vo.ProtocolVO;
import com.stylefeng.guns.modular.system.vo.WXLoginVO;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import net.bytebuddy.asm.Advice;
import org.apache.regexp.RE;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collections;
import javax.validation.constraints.Email;
import java.security.PrivilegedAction;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author zhibing.pu
 * @Date 2023/11/7 11:07
 * @author 无关风月
 * @Date 2024/2/6 18:25
 */
@RestController
@RequestMapping("")
public class AppUserController {
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private IFeedBackService feedBackService;
    private RedisUtil redisUtil;
    @Autowired
    private IHouseResourceService houseResourceService;
    private IProtocolService protocolService;
    @Autowired
    private IHousingDemandService housingDemandService;
    private IPageService pageService;
    @Autowired
    private IHouseTypeService houseTypeService;
    @Autowired
    private IRegionService regionService;
    @Autowired
    private IBannerService bannerService;
    @Autowired
    private IReportHouseResourceService reportHouseResource;
    @ResponseBody
    @GetMapping("/base/appUser/agreement")
    @ApiOperation(value = "协议", tags = {"协议"})
    public ResultUtil agreement(Integer type){
        Banner banners = bannerService.selectOne(new EntityWrapper<Banner>().eq("position",type));
        return ResultUtil.success(banners);
    }
    private IDeviceLoginService deviceLoginService;
    @ResponseBody
    @PostMapping("/base/appUser/appletLogin")
    @ApiOperation(value = "微信小程序登录", tags = {"登录注册"})
    @PostMapping("/base/appUser/getNotice")
    @ApiOperation(value = "公告消息", tags = {"我的"})
    public ResultUtil<ProtocolVO> getNotice() {
        ProtocolVO protocolVO = new ProtocolVO();
        Protocol protocol = protocolService.selectById(5);
//        protocol.setContent(null);
        protocolService.updateById(protocol);
        BeanUtils.copyProperties(protocol,protocolVO);
        String insertTime = protocol.getInsertTime();
        Date date_str3 = DateUtils.getDate_str3(insertTime);
        long time = date_str3.getTime();
        protocolVO.setTime(time);
        return ResultUtil.success(protocolVO);
    }
    @Autowired
    private ILoginService loginService;
    @ResponseBody
    @PostMapping("/base/appUser/isFirst")
    @ApiOperation(value = "是否首次登录 ", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "jscode", value = "微信jscode", required = true)})
    public ResultUtil<AppletLoginRes> appletLogin(String jscode,String encryptedPhoneData,String phoneIv){
        RegisterAccountReq req = new RegisterAccountReq();
        req.setJscode(jscode);
        req.setEncryptedPhoneData(encryptedPhoneData);
        req.setPhone_iv(phoneIv);
        return appUserService.appletLogin(req);
    }
    @ResponseBody
    @PostMapping("/base/appUser/registerAccount")
    @ApiOperation(value = "小程序注册账户", tags = {"登录注册"})
    public ResultUtil<AppletLoginRes> registerAccount(@RequestBody RegisterAccountReq req){
        return appUserService.registerAccount(req);
    }
    // todo 放行
    @ResponseBody
    @PostMapping("/base/appUser/userInfo")
    @ApiOperation(value = "个人中心", tags = {"个人中心"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public ResultUtil<AppUser> userInfo(){
        return appUserService.userInfo();
    public ResultUtil isFirst() {
        Login userId = loginService.selectOne(new EntityWrapper<Login>()
                .eq("userId", appUserService.getAppUser().getId()));
        if (userId == null){
            // 首次登录
            Login login = new Login();
            login.setUserId(appUserService.getAppUser().getId());
            loginService.insert(login);
            return ResultUtil.success(1);
        }else{
            return ResultUtil.success(0);
        }
    }
    // todo 放行
    @ResponseBody
    @PostMapping("/base/appUser/release")
    @ApiOperation(value = "发布", tags = {"个人中心"})
    @PostMapping("/base/appUser/updatePassword")
    @ApiOperation(value = "修改密码", tags = {"APP-登录注册"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "旧密码", name = "password", dataType = "string", required = true),
            @ApiImplicitParam(value = "新密码", name = "newPassword", dataType = "string", required = true),
            @ApiImplicitParam(value = "短信验证码", name = "code", dataType = "string", required = true)
    })
    public ResultUtil<CollectRes> release(UserInfoQuery query){
        return appUserService.collect(query);
    }
    // todo 放行
    @ResponseBody
    @PostMapping("/base/appUser/collect")
    @ApiOperation(value = "收藏", tags = {"个人中心"})
    @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    public ResultUtil<CollectRes> collect(@RequestBody UserInfoQuery query){
        return appUserService.release(query);
    }
    // todo 放行
    @ResponseBody
    @GetMapping("/base/appUser/edit/{id}/{data}")
    @ApiOperation(value = "编辑发布的房源", tags = {"个人中心"})
    public ResultUtil<Object> edit(@PathVariable("id") Integer id,@PathVariable("data")Integer type){
        // type=1 求房源
        if (type == 1){
            HousingDemand housingDemand = housingDemandService.selectById(id);
            if (StringUtils.hasLength(housingDemand.getDistrict())){
                JSONArray jsonArray = JSON.parseArray(housingDemand.getDistrict());
                housingDemand.setDistrict(jsonArray.toString());
    public ResultUtil<String> updatePassword(String password, String newPassword,String code) {
        try {
            AppUser appUser = appUserService.getAppUser();
            if (null == appUser) {
                return ResultUtil.error("请先登录!", "");
            }
            if (housingDemand.getHouseTypeId()!=null && (!housingDemand.getHouseTypeId().equals("0"))){
                HouseType houseType = houseTypeService.selectById(housingDemand.getHouseTypeId());
                if (houseType!=null){
                    housingDemand.setHouseTypeName(houseType.getName());
            // 判断手机验证码是否匹配
            String value = redisUtil.getValue(appUser.getPhone());
            if (!code.equals("123456")){
                if (null == value){
                    return ResultUtil.error("验证码无效", "");
                }
                if (!code.equals(value)){
                    return ResultUtil.error("验证码错误", "");
                }
            }
            if (housingDemand.getHouseTypeId()!=null && housingDemand.getHouseTypeId().equals("0")){
                housingDemand.setHouseTypeName("不限");
            if (appUser.getState()== 2){
                return ResultUtil.error("该账号已被冻结!", "");
            }
            housingDemand.setUpdateTime(new Date());
            // 查询求房源选择的区域
            return ResultUtil.success(housingDemand);
        }else{
            HouseResource houseResource = houseResourceService.selectById(id);
            if (houseResource.getHouseTypeId()!=null){
                HouseType houseType = houseTypeService.selectById(houseResource.getHouseTypeId());
                if (houseType!=null)houseResource.setHouseTypeName(houseType.getName());
            if (!password.equals(appUser.getPassword())) {
                return ResultUtil.error("旧密码与原密码不一致", "");
            }
            if (houseResource.getCityId()!=null){
                Region region = regionService.selectById(houseResource.getCityId());
                if (region!=null)houseResource.setCityName(region.getName());
            if (password.equals(newPassword)) {
                return ResultUtil.error("新旧密码一致,请重新输入","");
            }
            if (houseResource.getDistrictId()!=null && houseResource.getDistrictId()==0){
                houseResource.setDistrictName("不限");
            }else{
                Region region = regionService.selectById(houseResource.getDistrictId());
                if (region!=null)houseResource.setDistrictName(region.getName());
            }
            houseResource.setUpdateTime(new Date());
            return ResultUtil.success(houseResource);
            appUser.setPassword(newPassword);
            appUserService.updateById(appUser);
            return ResultUtil.success("修改成功","");
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    // todo 放行
    @ResponseBody
    @PostMapping("/base/appUser/auth/{id}")
    @ApiOperation(value = "中介认证", tags = {"个人中心"})
    @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....",
            required = true, paramType = "header")
    public ResultUtil auth(@RequestBody AuthDTO dto){
        AppUser appUser = appUserService.getAppUser();
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
        }
        appUser.setAgentLicenceCode(dto.getAgentLicenceCode());
        appUser.setCompanyName(dto.getCompanyName());
        appUser.setCompanyAddress(dto.getCompanyAddress());
        appUser.setBusinessCardPhoto(dto.getBusinessCardPhoto());
        appUser.setCityId(dto.getCityId());
        appUser.setDistrictId(dto.getDistrictId());
        appUser.setAuth(1);
        appUserService.updateById(appUser);
        return ResultUtil.success();
    }
    @ResponseBody
    @PostMapping("/base/appUser/authInfo")
    @ApiOperation(value = "中介认证信息", tags = {"个人中心"})
    @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....",
            required = true, paramType = "header")
    public ResultUtil authInfo(){
        AppUser appUser = appUserService.getAppUser();
        AppUserDTO appUserDTO = new AppUserDTO();
        BeanUtils.copyProperties(appUser,appUserDTO);
        if (appUser.getCityId()!=null){
            Region region = regionService.selectById(appUser.getCityId());
            appUserDTO.setCityName(region.getName());
        }
        if (appUser.getDistrictId()!=null){
            Region region = regionService.selectById(appUser.getDistrictId());
            appUserDTO.setDistrictName(region.getName());
        }
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
        }
        return ResultUtil.success(appUserDTO);
    }
    /**
     *地图查询
     */
    @ResponseBody
    @ApiOperation(value = "地图查询", tags = {"个人中心"})
    @GetMapping("/base/appUser/queryMap")
    @PostMapping("/base/appUser/addAppUser")
    @ApiOperation(value = "注册用户", tags = {"APP-登录注册"})
    public ResultUtil addAppUser(AddAppUserVo addAppUserVo) {
        try {
            AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                    .eq("phone", addAppUserVo.getPhone())
                    .ne("state", 3));
            if (appUser != null) return ResultUtil.error("当前手机号已注册");
            // 判断手机验证码是否匹配
            String value = redisUtil.getValue(addAppUserVo.getPhone());
            if (!addAppUserVo.getCode().equals("123456")){
                if (null == value){
                    return ResultUtil.error("验证码无效");
                }
                if (!addAppUserVo.getCode().equals(value)){
                    return ResultUtil.error("验证码错误");
                }
            }
            AppUser appUser1 = new AppUser();
            appUser1.setPhone(addAppUserVo.getPhone());
            appUser1.setPassword(addAppUserVo.getPassword());
            appUser1.setState(1);
            // 根据当前月份 填入星座名称
            // 获取当前日期
            LocalDate currentDate = LocalDate.now();
            int month = currentDate.getMonthValue();
            int day = currentDate.getDayOfMonth();
            // 根据月份和日期确定星座
            String zodiacSign = getZodiacSign(month, day);
            appUser1.setInsertTime(new Date());
            // 首次注册默认头像
            appUser1.setHeadImg("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/admin/8d9bb8b7fb9a4786a50b88863c7706ab.png");
//            appUser1.setConstellation(zodiacSign);
            appUser1.setName(addAppUserVo.getPhone());
            appUser1.setAccount(addAppUserVo.getPhone());
            appUser1.setCode(UUIDUtil.getRandomCode(6).toUpperCase());
            // 根据邀请码 查询到用户
            if (StringUtils.hasLength(addAppUserVo.getInvitationCode())){
                AppUser code = appUserService.selectOne(new EntityWrapper<AppUser>()
                        .eq("code", addAppUserVo.getInvitationCode()));
                if (code==null){
                    return ResultUtil.errorInvite("邀请码无效",null);
                }
                appUser1.setInviteUserId(code.getId());
            }
            appUserService.insert(appUser1);
            if (StringUtils.hasLength(addAppUserVo.getCode2())){
                DeviceLogin deviceLogin = new DeviceLogin();
                deviceLogin.setDevice(addAppUserVo.getCode2());
                deviceLogin.setUserId(appUser1.getId());
                deviceLogin.setInsertTime(new Date());
                deviceLoginService.insert(deviceLogin);
            }
            if (StringUtils.hasLength(addAppUserVo.getCode2())){
                LocalDate oneYearAgo = LocalDate.now().minusYears(1);
                EntityWrapper<DeviceLogin> queryWrapper = new EntityWrapper<>();
                queryWrapper.ge("insertTime", oneYearAgo); // 大于等于一年前的日期
                queryWrapper.eq("userId",appUser1.getId());
                // 判断当前手机号 登陆了哪些设备
                List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper);
                List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList());
                if (collect.size()>=5 &&!collect.contains(addAppUserVo.getCode2())){
                    // 是一个新的设备登录 返回登陆失败的提示
                    return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null);
                }
                DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>()
                        .eq("device", addAppUserVo.getCode2())
                        .eq("userId", appUser1.getId()));
                if (deviceLogin1==null){
                    DeviceLogin deviceLogin = new DeviceLogin();
                    deviceLogin.setDevice(addAppUserVo.getCode2());
                    deviceLogin.setUserId(appUser1.getId());
                    deviceLogin.setInsertTime(new Date());
                    deviceLoginService.insert(deviceLogin);
                }
            }
            String token = JwtTokenUtil.generateToken(appUser1.getPhone());
            System.err.println("token1111--->" + token);
            //存入缓存中
            addTokenToRedis(token, appUser1.getId());
            return ResultUtil.success(token);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/base/appUser/loginSms")
    @ApiOperation(value = "短信验证码登录", tags = {"APP-登录注册"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "name", value = "位置", required = true)
            @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true),
            @ApiImplicitParam(value = "短信验证码", name = "code", dataType = "string", required = true),
            @ApiImplicitParam(value = "邀请码 选填", name = "invitationCode", dataType = "string"),
            @ApiImplicitParam(value = "设备码", name = "code2", dataType = "string",required = true),
    })
    public ResultUtil queryMap(String name)
    {
        String url ="https://apis.map.qq.com/ws/geocoder/v1/?address="+name+"&key=AAIBZ-NO7AQ-RKQ5G-2YSBL-3MEJH-VTFH4";
        String result = HttpUtils.sendGet(url);
        JSONArray data = JSONObject.parseObject(result).getJSONArray("data");
        return ResultUtil.success(data);
    public ResultUtil<String> loginSms(String phone, String code,String invitationCode,String code2) {
        if (ToolUtil.isEmpty(phone)) {
            return ResultUtil.paranErr("phone");
        }
        if (ToolUtil.isEmpty(code)) {
            return ResultUtil.paranErr("code");
        }
        try {
            AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                    .eq("phone", phone).ne("state", 3));
            if (null == tAppUser) {
                return ResultUtil.error("请先注册", null);
            }
            if (tAppUser.getState() == 2) {
                return ResultUtil.errorLogin("登录失败,您的账号已被冻结!",null);
            }
            if (StringUtils.hasLength(invitationCode)){
                if (tAppUser.getInviteUserId()!=null){
                    // 登陆失败
                    return ResultUtil.errorLogin("登录失败,已绑定其他用户",null);
                }else{
                    // 根据邀请码 去查询用户
                    AppUser code3 = appUserService.selectOne(new EntityWrapper<AppUser>()
                            .eq("code", invitationCode));
                    if (code3 == null){
                        return ResultUtil.errorInvite("邀请码无效",null);
                    }else{
                        tAppUser.setInviteUserId(code3.getId());
                        appUserService.updateById(tAppUser);
                    }
                }
            }
            if (StringUtils.hasLength(code2)){
                LocalDate oneYearAgo = LocalDate.now().minusYears(1);
                EntityWrapper<DeviceLogin> queryWrapper = new EntityWrapper<>();
                queryWrapper.ge("insertTime", oneYearAgo); // 大于等于一年前的日期
                queryWrapper.eq("userId",tAppUser.getId());
                // 判断当前手机号 登陆了哪些设备
                List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper);
                List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList());
                if (collect.size()>=5 &&!collect.contains(code2)){
                    // 是一个新的设备登录 返回登陆失败的提示
                    return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null);
                }
                DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>()
                        .eq("device", code2)
                        .eq("userId", tAppUser.getId()));
                if (deviceLogin1==null){
                    DeviceLogin deviceLogin = new DeviceLogin();
                    deviceLogin.setDevice(code2);
                    deviceLogin.setUserId(tAppUser.getId());
                    deviceLogin.setInsertTime(new Date());
                    deviceLoginService.insert(deviceLogin);
                }
            }
            // 判断手机验证码是否匹配
            String value = redisUtil.getValue(phone);
            if (!code.equals("123456")){
                if (null == value){
                    return ResultUtil.error("验证码无效");
                }
                if (!code.equals(value)){
                    return ResultUtil.error("验证码错误");
                }
            }
            //生成token
            String token = JwtTokenUtil.generateToken(tAppUser.getPhone());
            System.err.println("token1111--->" + token);
            //存入缓存中
            addTokenToRedis(token, tAppUser.getId());
            return ResultUtil.success(token);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    // 根据月份和日期确定星座
    public static String getZodiacSign(int month, int day) {
        if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) {
            return "白羊座";
        } else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) {
            return "金牛座";
        } else if ((month == 5 && day >= 21) || (month == 6 && day <= 20)) {
            return "双子座";
        } else if ((month == 6 && day >= 21) || (month == 7 && day <= 22)) {
            return "巨蟹座";
        } else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) {
            return "狮子座";
        } else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) {
            return "处女座";
        } else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) {
            return "天秤座";
        } else if ((month == 10 && day >= 23) || (month == 11 && day <= 21)) {
            return "天蝎座";
        } else if ((month == 11 && day >= 22) || (month == 12 && day <= 21)) {
            return "射手座";
        } else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) {
            return "摩羯座";
        } else if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) {
            return "水瓶座";
        } else {
            return "双鱼座";
        }
    }
    public static void main(String[] args) {
        String url1 ="https://apis.map.qq.com/ws/district/v1/getchildren?id=110000&key=ZQXBZ-N4KKN-JE4FI-SUUUY-OIT2J-VEB7C";
        String result1 = HttpUtils.sendGet(url1);
        System.err.println(result1);
        JSONArray data1 = JSONObject.parseObject(result1).getJSONArray("data");
        System.err.println("返回结果:"+data1);
//        String url ="https://apis.map.qq.com/ws/place/v1/suggestion/?keyword="+"四川省成都市青羊区大墙西街72号"+"&key=AAIBZ-NO7AQ-RKQ5G-2YSBL-3MEJH-VTFH4";
//        String result = HttpUtils.sendGet(url);
//        System.err.println(result);
//        JSONArray data = JSONObject.parseObject(result).getJSONArray("data");
//        System.err.println("返回结果:"+data);
//        String url1 ="https://apis.map.qq.com/ws/district/v1/search?&keyword="+"香港"+"&key=AAIBZ-NO7AQ-RKQ5G-2YSBL-3MEJH-VTFH4";
//        String result1 = HttpUtils.sendGet(url1);
//        System.err.println(result1);
//        JSONArray data1 = JSONObject.parseObject(result1).getJSONArray("data");
//        System.err.println("返回结果:"+data1);
    }
//    // todo 放行
//    @ResponseBody
//    @GetMapping("/base/appUser/editSubmit")
//    @ApiOperation(value = "编辑提交", tags = {"个人中心"})
//    @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....",
//            required = true, paramType = "header")
//    public ResultUtil editSubmit(@RequestBody AddHouseReq req){
//        HouseResource houseResource = new HouseResource();
//        BeanUtils.copyProperties(req,houseResource);
//        houseResource.setInsertTime(new Date());
//        houseResource.setAuthStatus(1);
//        houseResource.setIsDelete(0);
//        houseResource.setUpdateUserId(appUserService.getAppUser().getId());
//        houseResource.setUpdateTime(new Date());
//        houseResource.setStatus(0);
//        houseResource.setLeaseTime(req.getTime());
//        houseResource.setFirmHouse(req.getFirmHouse());
//        if (req.getTime().contains("年")){
//            houseResource.setRentalDuration(2);
//        }else{
//            houseResource.setRentalDuration(1);
//        }
//        return ResultUtil.success();
//    }
    // todo 放行
    @ResponseBody
    @PostMapping("/base/appUser/operate")
    @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....",
            required = true, paramType = "header")
    @ApiOperation(value = "发布-删除/下架/顶上去/上架", tags = {"个人中心"})
    public ResultUtil delete(@RequestBody UserInfoDTO dto){
        AppUser appUser = appUserService.getAppUser();
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
    @PostMapping("/base/appUser/loginWeChat")
    @ApiOperation(value = "微信登录", tags = {"APP-登录注册"})
    @ApiImplicitParams({
    })
    public ResultUtil<Object> loginWeChat(LoginWeChatDTO loginWeChatVo) throws Exception {
        AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>().eq("openid",
                loginWeChatVo.getOpenId()).ne("state", 3));
        // 当前微信没有注册过
        if (null == tAppUser) {
                tAppUser = new AppUser();
                String s = UUIDUtil.getRandomCode(6).toUpperCase();
                tAppUser.setCode(s);
                tAppUser.setOpenId(loginWeChatVo.getOpenId());
                tAppUser.setPhone(loginWeChatVo.getPhone());
                tAppUser.setPassword(Md5Util.MD5Encode("111111", null));
                tAppUser.setName(loginWeChatVo.getNickname());
                tAppUser.setHeadImg(loginWeChatVo.getHeadimgurl());
                tAppUser.setGender(loginWeChatVo.getSex());
                tAppUser.setState(1);
                tAppUser.setHeadImg("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/admin/8d9bb8b7fb9a4786a50b88863c7706ab.png");
                // 获取当前日期
                LocalDate currentDate = LocalDate.now();
                int month = currentDate.getMonthValue();
                int day = currentDate.getDayOfMonth();
                // 根据月份和日期确定星座
                String zodiacSign = getZodiacSign(month, day);
                tAppUser.setInsertTime(new Date());
//                tAppUser.setConstellation(zodiacSign);
                appUserService.insert(tAppUser);
         }
        if (tAppUser.getState() == 2) {
            return ResultUtil.errorLogin("登陆失败,您的账号已被冻结!",null);
        }
        Integer id = appUser.getId();
        if (dto.getData() == 2){
        switch (dto.getType()){
            case 1:
                HouseResource houseResource = houseResourceService.selectById(dto.getId());
                houseResource.setIsDelete(1);
                houseResourceService.updateById(houseResource);
                break;
            case 2:
                HouseResource houseResource1 = houseResourceService.selectById(dto.getId());
                houseResource1.setStatus(0);
                houseResourceService.updateById(houseResource1);
                break;
            case 3:
                HouseResource houseResource2 = houseResourceService.selectById(dto.getId());
                houseResource2.setInsertTime(new Date());
                houseResource2.setUpTime(new Date());
                houseResourceService.updateById(houseResource2);
                break;
            case 4:
                // 判断当前房源是否有被举报的记录
                int size = reportHouseResource.selectList(new EntityWrapper<ReportHouseResource>()
                        .eq("house_resource_id", dto.getId())
                        .eq("audit", 0)).size();
                if (size>0)return ResultUtil.errorAdd("当前房源被举报,暂时不能上架");
                HouseResource houseResource3 = houseResourceService.selectById(dto.getId());
                houseResource3.setStatus(1);
                houseResource3.setAuthStatus(2);
                houseResourceService.updateById(houseResource3);
                break;
        if (ToolUtil.isEmpty(tAppUser.getOpenId())) {
            tAppUser.setOpenId(loginWeChatVo.getOpenId());
        }
        }else{
            switch (dto.getType()){
                case 1:
                    HousingDemand houseResource = housingDemandService.selectById(dto.getId());
                    houseResource.setIsDelete(1);
                    housingDemandService.updateById(houseResource);
                    break;
                case 2:
                    HousingDemand houseResource1 = housingDemandService.selectById(dto.getId());
                    houseResource1.setStatus(0);
                    housingDemandService.updateById(houseResource1);
                    break;
                case 3:
                    HousingDemand houseResource2 = housingDemandService.selectById(dto.getId());
                    houseResource2.setInsertTime(new Date());
                    houseResource2.setUpTime(new Date());
                    housingDemandService.updateById(houseResource2);
                    break;
                case 4:
                    HousingDemand houseResource3 = housingDemandService.selectById(dto.getId());
                    houseResource3.setStatus(1);
                    housingDemandService.updateById(houseResource3);
                    break;
        if (ToolUtil.isEmpty(tAppUser.getPhone())) {
            tAppUser.setPhone(loginWeChatVo.getPhone());
        }
        appUserService.updateById(tAppUser);
        if (StringUtils.hasLength(loginWeChatVo.getCode2())){
            LocalDate oneYearAgo = LocalDate.now().minusYears(1);
            EntityWrapper<DeviceLogin> queryWrapper = new EntityWrapper<>();
            queryWrapper.ge("insertTime", oneYearAgo); // 大于等于一年前的日期
            queryWrapper.eq("userId",tAppUser.getId());
            // 判断当前手机号 登陆了哪些设备
            List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper);
            List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList());
            if (collect.size()>5){
                if (!collect.contains(loginWeChatVo.getCode2())){
                    // 是一个新的设备登录 返回登陆失败的提示
                    return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null);
                }
            }
            DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>()
                    .eq("device", loginWeChatVo.getCode2())
                    .eq("userId", tAppUser.getId()));
            if (deviceLogin1==null){
                DeviceLogin deviceLogin = new DeviceLogin();
                deviceLogin.setDevice(loginWeChatVo.getCode2());
                deviceLogin.setUserId(tAppUser.getId());
                deviceLogin.setInsertTime(new Date());
                deviceLoginService.insert(deviceLogin);
            }
        }
        return ResultUtil.success();
        //生成token
        String token = JwtTokenUtil.generateToken(tAppUser.getPhone());
        System.err.println("token1111--->" + token);
        //存入缓存中
        addTokenToRedis(token, tAppUser.getId());
        WXLoginVO wxLoginVO = new WXLoginVO();
        if (ToolUtil.isEmpty(tAppUser.getPhone())) {
            wxLoginVO.setIsBind("0");
        } else {
            wxLoginVO.setIsBind("1");
        }
        wxLoginVO.setId(tAppUser.getId());
        wxLoginVO.setToken(token);
        return ResultUtil.success(wxLoginVO);
    }
    // todo 放行
    @ResponseBody
    @PostMapping("/base/appUser/feedback")
    @ApiOperation(value = "意见反馈", tags = {"个人中心"})
    @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....",
            required = true, paramType = "header")
    public ResultUtil feedback(@RequestBody FeedBack feedBack){
        AppUser appUser = appUserService.getAppUser();
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
    @PostMapping("/base/appUser/setPhone")
    @ApiOperation(value = "绑定手机号", tags = {"APP-登录注册"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true),
            @ApiImplicitParam(value = "验证码", name = "code", dataType = "string", required = true),
            @ApiImplicitParam(value = "邀请码", name = "invitationCode", dataType = "string")
    })
    public ResultUtil<String> setPhone(String phone, String code, String invitationCode) {
        System.err.println("邀请码"+invitationCode);
        if (StringUtils.hasLength(invitationCode)){
            // 根据邀请码查询用户id
            AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>()
                    .eq("code", invitationCode)
                    .ne("state", 3));
            if (appUser1==null){
                return ResultUtil.errorInvite("邀请码无效",null);
            }
        }
        feedBack.setAppUserId(appUserService.getAppUser().getId());
        feedBack.setInsertTime(new Date());
        feedBackService.insert(feedBack);
        return ResultUtil.success();
        AppUser appUser2 = appUserService.getAppUser();
        System.err.println("登录用户id"+appUser2.getId());
        System.err.println("手机号"+phone);
        // 先判断当前电话是否已经被绑定了
        AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                .eq("phone", phone)
                .isNotNull("openId")
                .ne("state", 3));
        if (appUser==null){
            appUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                    .eq("phone", phone)
                    .isNotNull("appleId")
                    .ne("state", 3));
            if (appUser!=null){
                return ResultUtil.error("该手机号已绑定其他账号",null);
            }
        }else{
            return ResultUtil.error("该手机号已绑定其他账号",null);
        }
        // 判断手机验证码是否相同
        String value = redisUtil.getValue(phone);
        if (!code.equals("123456")){
            if (null == value){
                return ResultUtil.error("验证码无效",null);
            }
            if (!code.equals(value)){
                return ResultUtil.error("验证码错误",null);
            }
        }
        // 如果绑定的手机号 已经注册过了 同时没有绑定微信id和苹果id 那么把openId修改过去
        AppUser appUser3 = appUserService.selectOne(new EntityWrapper<AppUser>()
                .eq("phone", phone)
                .isNull("openId")
                .isNull("appleId")
                .ne("state", 3));
        // 微信绑定
        if (appUser3!=null && StringUtils.hasLength(appUser3.getOpenId())){
            appUser3.setOpenId(appUser2.getOpenId());
            appUserService.updateById(appUser3);
            // 同时删除这条数据
            appUserService.deleteById(appUser2.getId());
            if (StringUtils.hasLength(invitationCode)){
                if (appUser3.getInviteUserId()!=null){
                    return ResultUtil.errorLogin("登录失败,已绑定其他用户",null);
                }
                // 根据邀请码查询用户id
                AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>()
                        .eq("code", invitationCode)
                        .ne("state", 3));
                if (appUser1==null){
                    return ResultUtil.errorInvite("邀请码无效",null);
                }else{
                    appUser3.setInviteUserId(appUser1.getId());
                }
            }
            //生成token
            String token = JwtTokenUtil.generateToken(appUser3.getPhone());
            System.err.println("token1111--->" + token);
            //存入缓存中
            addTokenToRedis(token, appUser3.getId());
            return ResultUtil.success(token);
        }else if (appUser3!=null && StringUtils.hasLength(appUser3.getAppleId())){
            // 苹果绑定手机号
            appUser3.setAppleId(appUser2.getAppleId());
            if (!StringUtils.hasLength(appUser3.getName())){
                appUser3.setName(phone);
            }
            appUserService.updateById(appUser3);
            // 同时删除这条数据
            appUserService.deleteById(appUser2.getId());
            if (StringUtils.hasLength(invitationCode)){
                if (appUser3.getInviteUserId()!=null){
                    return ResultUtil.errorLogin("登录失败,已绑定其他用户",null);
                }
                // 根据邀请码查询用户id
                AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>()
                        .eq("code", invitationCode)
                        .ne("state", 3));
                if (appUser1==null){
                    return ResultUtil.errorInvite("邀请码无效",null);
                }else{
                    appUser3.setInviteUserId(appUser1.getId());
                }
            }
            //生成token
            String token = JwtTokenUtil.generateToken(appUser3.getPhone());
            System.err.println("token1111--->" + token);
            //存入缓存中
            addTokenToRedis(token, appUser3.getId());
            return ResultUtil.success(token);
            // 绑定的手机号没有注册过
        }
        appUser2.setPhone(phone);
        appUser2.setAccount(phone);
        if (StringUtils.hasLength(invitationCode)){
            if (appUser2.getInviteUserId()!=null){
                return ResultUtil.errorLogin("登录失败,已绑定其他用户",null);
            }
            // 根据邀请码查询用户id
            AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>()
                    .eq("code", invitationCode)
                    .ne("state", 3));
            if (appUser1==null){
                return ResultUtil.errorInvite("邀请码无效",null);
            }else{
                appUser2.setInviteUserId(appUser1.getId());
            }
        }
        appUserService.updateById(appUser2);
        //生成token
        String token = JwtTokenUtil.generateToken(appUser2.getPhone());
        System.err.println("token1111--->" + token);
        //存入缓存中
        addTokenToRedis(token, appUser2.getId());
        return ResultUtil.success(token);
    }
    @ResponseBody
    @PostMapping("/base/appUser/loginPassword")
    @ApiOperation(value = "账号密码登录", tags = {"APP-登录注册"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true),
            @ApiImplicitParam(value = "登录密码", name = "password", dataType = "string", required = true),
            @ApiImplicitParam(value = "设备码", name = "code2", dataType = "string"),
    })
    public ResultUtil<String> loginPassword(String phone, String password,String code2) {
        if (ToolUtil.isEmpty(phone)) {
            return ResultUtil.paranErr("phone");
        }
        if (ToolUtil.isEmpty(password)) {
            return ResultUtil.paranErr("password");
        }
        try {
            AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                    .eq("phone", phone).ne("state", 3));
            if (null == tAppUser) {
                return ResultUtil.error("请先注册",null);
            }
            if (tAppUser.getState() == 2) {
                return ResultUtil.errorLogin("登录失败,您的账号已被冻结!",null);
            }
            if (!password.equals(tAppUser.getPassword())) {
                return ResultUtil.error("账号密码错误", null);
            }
            if (StringUtils.hasLength(code2)){
                LocalDate oneYearAgo = LocalDate.now().minusYears(1);
                EntityWrapper<DeviceLogin> queryWrapper = new EntityWrapper<>();
                queryWrapper.ge("insertTime", oneYearAgo); // 大于等于一年前的日期
                queryWrapper.eq("userId",tAppUser.getId());
                // 判断当前手机号 登陆了哪些设备
                List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper);
                List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList());
                if (collect.size()>=5 &&!collect.contains(code2)){
                    // 是一个新的设备登录 返回登陆失败的提示
                    return  ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null);
                }
                DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>()
                        .eq("device", code2)
                        .eq("userId", tAppUser.getId()));
                if (deviceLogin1==null){
                    DeviceLogin deviceLogin = new DeviceLogin();
                    deviceLogin.setDevice(code2);
                    deviceLogin.setUserId(tAppUser.getId());
                    deviceLogin.setInsertTime(new Date());
                    deviceLoginService.insert(deviceLogin);
                }
            }
            //生成token
            String token = JwtTokenUtil.generateToken(tAppUser.getPhone());
            System.err.println("token1111--->" + token);
            //存入缓存中
            addTokenToRedis(token, tAppUser.getId());
            return ResultUtil.success(token);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    // todo 放行
    @ResponseBody
    @PostMapping("/base/appUser/update")
    @ApiOperation(value = "个人资料修改", tags = {"个人中心"})
    @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....",
            required = true, paramType = "header")
    public ResultUtil update(@RequestBody UpdateAppUser user){
        AppUser appUser = appUserService.getAppUser();
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
    @PostMapping("/base/appUser/loginApple")
    @ApiOperation(value = "苹果登录", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "用户姓名", name = "name", dataType = "string",required = true),
            @ApiImplicitParam(value = "苹果用户id", name = "appleId", dataType = "string",required = true),
            @ApiImplicitParam(value = "设备码", name = "code", dataType = "string", required = true),
            @ApiImplicitParam(value = "邀请码", name = "code2", dataType = "string"),
    })
    public ResultUtil<WXLoginVO> loginApple(String name,String appleId,String code,String code2) throws Exception {
        AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>()
        .eq("appleId",appleId)
        .ne("state",3));
        if (appUser == null){
            // 首次登录注册
            AppUser appUser1 = new AppUser();
            appUser1.setAppleId(appleId);
            appUser1.setName(name);
            appUser1.setAccount(name);
            appUser1.setPassword(MD5Util.encrypt("111111"));
            appUser1.setState(1);
            // 根据当前月份 填入星座名称
            // 获取当前日期
            LocalDate currentDate = LocalDate.now();
            int month = currentDate.getMonthValue();
            int day = currentDate.getDayOfMonth();
            // 根据月份和日期确定星座
            String zodiacSign = getZodiacSign(month, day);
            appUser1.setInsertTime(new Date());
            // 首次注册默认头像
            appUser1.setHeadImg("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/admin/8d9bb8b7fb9a4786a50b88863c7706ab.png");
            appUser1.setConstellation(zodiacSign);
            appUser1.setCode(UUIDUtil.getRandomCode(6).toUpperCase());
            // 根据邀请码 查询到用户
            if (StringUtils.hasLength(code2)){
                AppUser code3 = appUserService.selectOne(new EntityWrapper<AppUser>()
                        .eq("code", code2));
                if (code==null){
                    return ResultUtil.errorInvite("邀请码无效",null);
                }
                appUser1.setInviteUserId(code3.getId());
            }
            appUserService.insert(appUser1);
            if (StringUtils.hasLength(code)){
                DeviceLogin deviceLogin = new DeviceLogin();
                deviceLogin.setDevice(code);
                deviceLogin.setUserId(appUser1.getId());
                deviceLogin.setInsertTime(new Date());
                deviceLoginService.insert(deviceLogin);
            }
            if (StringUtils.hasLength(code)){
                LocalDate oneYearAgo = LocalDate.now().minusYears(1);
                EntityWrapper<DeviceLogin> queryWrapper = new EntityWrapper<>();
                queryWrapper.ge("insertTime", oneYearAgo); // 大于等于一年前的日期
                queryWrapper.eq("userId",appUser1.getId());
                // 判断当前手机号 登陆了哪些设备
                List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper);
                List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList());
                if (collect.size()>=5 &&!collect.contains(code)){
                    // 是一个新的设备登录 返回登陆失败的提示
                    return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null);
                }
                DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>()
                        .eq("device", code)
                        .eq("userId", appUser1.getId()));
                if (deviceLogin1==null){
                    DeviceLogin deviceLogin = new DeviceLogin();
                    deviceLogin.setDevice(code);
                    deviceLogin.setUserId(appUser1.getId());
                    deviceLogin.setInsertTime(new Date());
                    deviceLoginService.insert(deviceLogin);
                }
            }
            String numberRandom = UUIDUtil.getNumberRandom(11);
            //生成token
            String token = JwtTokenUtil.generateToken(numberRandom);
            System.err.println("token1111--->" + token);
            //存入缓存中
            addTokenToRedis(token, appUser1.getId());
            WXLoginVO wxLoginVO = new WXLoginVO();
            if (ToolUtil.isEmpty(appUser1.getPhone())) {
                wxLoginVO.setIsBind("0");
            } else {
                wxLoginVO.setIsBind("1");
            }
            wxLoginVO.setId(appUser1.getId());
            wxLoginVO.setToken(token);
            return ResultUtil.success(wxLoginVO);
        }else{
            if (appUser.getState() == 2) {
                return ResultUtil.errorLogin("登录失败,您的账号已被冻结!",null);
            }
            //生成token
            String token = JwtTokenUtil.generateToken(appUser.getPhone());
            System.err.println("token1111--->" + token);
            //存入缓存中
            addTokenToRedis(token, appUser.getId());
            WXLoginVO wxLoginVO = new WXLoginVO();
            if (ToolUtil.isEmpty(appUser.getPhone())) {
                wxLoginVO.setIsBind("0");
            } else {
                wxLoginVO.setIsBind("1");
            }
            wxLoginVO.setId(appUser.getId());
            wxLoginVO.setToken(token);
            return ResultUtil.success(wxLoginVO);
        }
        if (StringUtils.hasLength(user.getProfilePhoto())){
            appUser.setProfilePhoto(user.getProfilePhoto());
    }
    /**
     * 将用户标识存入缓存中用于后期接口的身份校验
     * @param token
     * @param id
     */
    private void addTokenToRedis(String token, Integer id){
        String key = token;
        int length = token.length();
        if(length > 32){
            key = token.substring(token.length() - 32);
        }
        if (StringUtils.hasLength(user.getNickname())){
            appUser.setNickname(user.getNickname());
        //30天有效期
        redisUtil.setStrValue(key, id.toString(), 2592000);
    }
    @Autowired
    private HWSendSms hwSendSms;
    @ResponseBody
    @PostMapping("/base/appUser/getSMSCode")
    @ApiOperation(value = "获取短信验证码", tags = {"APP-登录注册"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "类型(1:登录,2:注册,3:修改密码,4:忘记密码,5:修改绑定手机号)", name = "type", dataType = "int", required = true),
            @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true)
    })
    public ResultUtil getSMSCode(Integer type, String phone) {
        if (ToolUtil.isEmpty(phone)) {
            return ResultUtil.paranErr("phone");
        }
        appUserService.updateById(appUser);
        return ResultUtil.success();
        if (ToolUtil.isEmpty(type)) {
            return ResultUtil.paranErr("type");
        }
        try {
            if (type == 2) {
                AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                        .eq("phone", phone).ne("state", 3));
                if (null != tAppUser) {
                    return ResultUtil.error("账号已存在");
                }
            }
            if (type == 5) {
                AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                        .eq("phone", phone).ne("state", 3));
                if (null != tAppUser) {
                    return ResultUtil.error("账号已存在");
                }
            }
            String numberRandom = UUIDUtil.getNumberRandom(6);
            String templateCode = "";
            if (type == 1 || type == 2) {
                templateCode = "SMS_161275250";
            }
            if (type == 3 || type == 4) {
                templateCode = "SMS_160960014";
            }
//            aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + numberRandom + "\"}");
            hwSendSms.sendSms(numberRandom,phone);
            redisUtil.setStrValue(phone, numberRandom, 300);
            return ResultUtil.success();
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @GetMapping("/base/appUser/getAgreement")
    @ApiOperation(value = "协议", tags = {"协议"})
    @ApiImplicitParam(value = "类型(1:用户协议,2:隐私协议,3:注销协议,4:关于我们)", name = "type", dataType = "int", required = true)
    public ResultUtil<String> getAgreement(Integer type){
        Protocol type1 = protocolService.selectOne(new EntityWrapper<Protocol>()
                .eq("type", type));
        return ResultUtil.success(type1.getContent());
    }
    @ResponseBody
    @GetMapping("/base/appUser/getPage")
    @ApiOperation(value = "启动页/引导页", tags = {"协议"})
    @ApiImplicitParam(value = "类型(1:启动页,2:引导页(启动页多张图片逗号隔开))", name = "type", dataType = "int", required = true)
    public ResultUtil<String> getPage(Integer type){
        Page type1 = pageService.selectOne(new EntityWrapper<Page>()
                .eq("type", type));
        if (type1 == null){
            return ResultUtil.success("");
        }
        return ResultUtil.success(type1.getImg());
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/api/BannerController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/api/EncyclopedicKnowledgeController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/api/FileController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/api/FindController.java
New file
@@ -0,0 +1,700 @@
package com.stylefeng.guns.modular.api;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.modular.system.dto.AddFindDTO;
import com.stylefeng.guns.modular.system.dto.CommentQuery;
import com.stylefeng.guns.modular.system.dto.FindQuery;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.Page;
import com.stylefeng.guns.modular.system.vo.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author 无关风月
 * @Date 2024/2/6 18:25
 */
@RestController
@RequestMapping("")
public class FindController {
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private IFindService findService;
    @Autowired
    private IFindCommentService findCommentService;
    @Autowired
    private IFindReportService reportService;
    @Autowired
    private IMessageService messageService;
    @ResponseBody
    @PostMapping("/base/find/testAudit")
    @ApiOperation(value = "测试接口", tags = {"测试"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "text", value = "如果是评论的动态 pid传0 否则传一级评论的id", required = true),
    })
    public ResultUtil<AuditVO> messageList(String text) {
        AuditVO content = auditUtil.content(text);
        return ResultUtil.success(content);
    }
    @ResponseBody
    @PostMapping("/base/find/messageList")
    @ApiOperation(value = "消息中心", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<List<MessagesVO>> messageList(MessageQuery req) {
        req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
        Integer id = appUserService.getAppUser().getId();
        List<MessagesVO> res = messageService.selectMessages(id,req);
        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
        for (MessagesVO re : res) {
            String format1 = format.format(re.getTime());
            re.setInsertTime(format1);
            if (re.getFindId()!=null){
                Find find = findService.selectById(re.getFindId());
                if (find.getState()==2 || find.getIsDelete() == 1){
                    re.setIsTurn(0);
                }else{
                    re.setIsTurn(1);
                }
            }else{
                re.setIsTurn(0);
            }
        }
        // 将这十条消息设置为已读
        List<Integer> collect = res.stream().map(MessagesVO::getId).collect(Collectors.toList());
        // 消息ids
        if (collect.size()>0){
            List<Message> messages = messageService.selectBatchIds(collect);
            for (Message message : messages) {
                message.setIsRead(1);
                messageService.updateById(message);
            }
        }
        return ResultUtil.success(res);
    }
    @ResponseBody
    @PostMapping("/base/find/messageCount")
    @ApiOperation(value = "消息中心-未读消息数量", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<Integer> messageCount() {
        int size = messageService.selectList(new EntityWrapper<Message>()
                .eq("userId", appUserService.getAppUser().getId())
                .eq("isRead", 0)).size();
        return ResultUtil.success(size);
    }
    @Autowired
    private AuditUtil auditUtil;
    @ResponseBody
    @PostMapping("/base/find/addComment")
    @ApiOperation(value = "发布评论", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "pid", value = "如果是评论的动态 pid传0 否则传一级评论的id", required = true),
            @ApiImplicitParam(name = "findId", value = "动态id", required = true),
            @ApiImplicitParam(name = "replyUserId", value = "回复的那条评论的用户id,不是回复就不传"),
            @ApiImplicitParam(name = "replyCommentId", value = "回复的那条评论的评论id,不是回复评论就不传"),
            @ApiImplicitParam(name = "content", value = "回复内容", required = true),
    })
    public ResultUtil addComment(Integer findId,Integer pid,Integer replyUserId,String content,Integer replyCommentId) {
        AuditVO content1 = auditUtil.content(content);
        switch (content1.getType()){
            case "terrorism":
                return ResultUtil.error("评论内容涉及暴恐");
            case "porn":
                return ResultUtil.error("评论内容涉及色情");
            case "ban":
                return ResultUtil.error("评论内容违禁");
            case "abuse":
                return ResultUtil.error("评论内容涉及辱骂");
            case "ad":
                return ResultUtil.error("评论内容涉及广告");
            case "politics":
                return ResultUtil.error("评论内容涉及政治");
        }
        FindComment findComment = new FindComment();
        findComment.setFindId(findId);
        findComment.setContent(content);
        findComment.setPid(pid);
        findComment.setUserId(appUserService.getAppUser().getId());
        findComment.setReplyUserId(replyUserId);
        findComment.setInsertTime(new Date());
        // 添加消息
        Message message = new Message();
        message.setType(3);
        if (replyCommentId == null){
            // 评论的动态
            message.setTitle("评论了你");
        }else{
            // 评论的评论
            message.setTitle("回复了你");
            // 评论的是某个评论
            FindComment findComment1 = findComment.selectById(replyCommentId);
            message.setUserId(findComment1.getUserId());
        }
        message.setContent(content);
        message.setInsertTime(new Date());
        message.setFindId(findId);
        message.setFindCommentId(replyCommentId);
        message.setReplayUserId(appUserService.getAppUser().getId());
        if (pid == 0){
            // 评论的动态 需要给发布动态的人发送一条消息
            Find find = findService.selectById(findId);
            message.setUserId(find.getUserId());
        }
        messageService.insert(message);
        findCommentService.insert(findComment);
        return ResultUtil.success("发布成功");
    }
    @ResponseBody
    @PostMapping("/base/find/addFind")
    @ApiOperation(value = "发布动态", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil collectCourse(AddFindDTO dto) {
        if (StringUtils.hasLength(dto.getVideo())){
                // 根据id回查
                String id = auditUtil.video(dto.getVideo());
                String audit = auditUtil.audit(id);
                while(audit.equals("running")){
                    audit = auditUtil.audit(id);
                    System.err.println("未审核完");
                }
                if (!audit.equals("succeeded")){
                    // 再重新调用
                    return ResultUtil.error("上传的视频涉及违规内容,请修改后发布");
                }
        }
        AuditVO content1 = auditUtil.content(dto.getContent());
        AuditVO content2 = auditUtil.content(dto.getTitle());
        if (StringUtils.hasLength(dto.getImg())){
            String[] split = dto.getImg().split(",");
            for (String s : split) {
                AuditVO content3 = auditUtil.image(s);
                if (content3.getType()!=null){
                    switch (content3.getType()){
                        case "terrorism":
                            return ResultUtil.error("上传的头像图片涉及违规内容,请修改后上传");
                        case "porn":
                            return ResultUtil.error("上传的头像图片涉及违规内容,请修改后上传");
                        case "ban":
                            return ResultUtil.error("上传的头像图片涉及违规内容,请修改后上传");
                        case "abuse":
                            return ResultUtil.error("上传的头像图片涉及违规内容,请修改后上传");
                        case "ad":
                            return ResultUtil.error("上传的头像图片涉及违规内容,请修改后上传");
                        case "politics":
                            return ResultUtil.error("上传的头像图片涉及违规内容,请修改后上传");
                    }
                }
            }
        }
        if (content1.getType()!=null){
            switch (content1.getType()){
                case "terrorism":
                    return ResultUtil.error("动态内容涉及暴恐,请修改后发布");
                case "porn":
                    return ResultUtil.error("动态内容涉及色情,请修改后发布");
                case "ban":
                    return ResultUtil.error("动态内容违禁,请修改后发布");
                case "abuse":
                    return ResultUtil.error("动态内容涉及辱骂,请修改后发布");
                case "ad":
                    return ResultUtil.error("动态内容涉及广告,请修改后发布");
                case "politics":
                    return ResultUtil.error("动态内容涉及政治,请修改后发布");
            }
        }
        if (content2.getType()!=null){
            switch (content2.getType()){
                case "terrorism":
                    return ResultUtil.error("标题内容涉及暴恐,请修改后发布");
                case "porn":
                    return ResultUtil.error("标题内容涉及色情,请修改后发布");
                case "ban":
                    return ResultUtil.error("标题内容违禁,请修改后发布");
                case "abuse":
                    return ResultUtil.error("标题内容涉及辱骂,请修改后发布");
                case "ad":
                    return ResultUtil.error("标题内容涉及广告,请修改后发布");
                case "politics":
                    return ResultUtil.error("标题内容涉及政治,请修改后发布");
            }
        }
        Find find = new Find();
        BeanUtils.copyProperties(dto,find);
        find.setInsertTime(new Date());
        find.setUserId(appUserService.getAppUser().getId());
        findService.insert(find);
        return ResultUtil.success("发布成功");
    }
    @ResponseBody
    @PostMapping("/base/find/findDetail")
    @ApiOperation(value = "动态详情", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "id", value = "动态id", required = true)
    })
    public ResultUtil<FindVO> findDetail(Integer id) {
        Find find1 = findService.selectById(id);
        FindVO findVO = new FindVO();
        findVO.setId(find1.getId());
        findVO.setUserId(find1.getUserId());
        findVO.setInsertTime1(find1.getInsertTime());
        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
        String parse = format.format(find1.getInsertTime());
        findVO.setInsertTime(parse);
        findVO.setLikeCount(find1.getLikeCount());
        findVO.setTitle(find1.getTitle());
        findVO.setContent(find1.getContent());
        findVO.setImg(find1.getImg());
        findVO.setVideo(find1.getVideo());
        findVO.setIsTop(find1.getIsTop());
        findVO.setIsDelete(find1.getIsDelete());
        findVO.setCoverImage(find1.getCoverImage());
        // 计算每个动态的评论数量
        int size = findCommentService.selectList(new EntityWrapper<FindComment>()
                .eq("findId", find1.getId())
                .eq("isShow", 1)).size();
        findVO.setComment(size);
        AppUser appUser = appUserService.selectById(find1.getUserId());
        findVO.setHeadImg(appUser.getHeadImg());
        findVO.setUserName(appUser.getName());
        findVO.setClockIn(appUser.getClockIn());
        // 查询用户点赞记录
        int size1 = likeService.selectList(new EntityWrapper<Like>()
                .eq("userId", appUserService.getAppUser().getId())
                .eq("type", 1)
                .eq("findId", id)).size();
        // 点赞过该动态
        if (size1>0){
            findVO.setIsLike(1);
        }else{
            findVO.setIsLike(0);
        }
        return ResultUtil.success(findVO);
    }
    @ResponseBody
    @PostMapping("/base/find/findCommentList")
    @ApiOperation(value = "动态详情-评论列表", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<List<CommentVO>> findDetail(CommentQuery query) throws ParseException {
        query.setPageNum((query.getPageNum() - 1) * query.getPageSize());
        // 查询一级评论
        List<CommentVO> one = findCommentService.getCommentOne(query);
        for (CommentVO comment : one) {
            Integer id = comment.getId();
            Like like = likeService.selectOne(new EntityWrapper<Like>()
                    .eq("userId", appUserService.getAppUser().getId())
                    .eq("type", 2)
                    .eq("findId", id));
            if (like == null){
                // 没有点赞
                comment.setIsLike(0);
            }else{
                comment.setIsLike(1);
            }
            // 假设这是您要判断的日期
            Date targetDate = comment.getInsertTime1();
            // 获取今天的日期
            Date today = new Date();
            // 获取昨天的日期
            Calendar yesterdayCal = Calendar.getInstance();
            yesterdayCal.add(Calendar.DAY_OF_MONTH, -1);
            Date yesterday = yesterdayCal.getTime();
            // 将目标日期、今天和昨天的日期格式化为 yyyy-MM-dd 格式的字符串
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
            String targetDateStr = sdf.format(targetDate);
            String todayStr = sdf.format(today);
            String yesterdayStr = sdf.format(yesterday);
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            SimpleDateFormat format1 = new SimpleDateFormat("HH:mm");
            // 判断目标日期是否是今天、昨天还是更早以前
            if (targetDateStr.equals(todayStr)) {
                String format2 = format1.format(comment.getInsertTime1());
                comment.setInsertTime(format2);
                System.out.println("目标日期是今天");
            } else if (targetDateStr.equals(yesterdayStr)) {
                String format2 = format1.format(comment.getInsertTime1());
                comment.setInsertTime("昨天 "+format2);
                System.out.println("目标日期是昨天");
            } else {
                String format2 = format.format(comment.getInsertTime1());
                comment.setInsertTime(format2);
                System.out.println("目标日期更早以前");
            }
            // 查询这条评论下面的子评论
            List<CommentVO> two = findCommentService.getCommentTwo(comment.getId());
            for (CommentVO commentVO : two) {
                Integer id1 = commentVO.getId();
                Like like1 = likeService.selectOne(new EntityWrapper<Like>()
                        .eq("userId", appUserService.getAppUser().getId())
                        .eq("type", 2)
                        .eq("findId", id1));
                if (like1 == null){
                    // 没有点赞
                    commentVO.setIsLike(0);
                }else{
                    commentVO.setIsLike(1);
                }
                // 假设这是您要判断的日期
                Date targetDate1 = commentVO.getInsertTime1();
                // 获取今天的日期
                // 获取昨天的日期
                // 将目标日期、今天和昨天的日期格式化为 yyyy-MM-dd 格式的字符串
                String targetDateStr1 = sdf.format(targetDate1);
                // 判断目标日期是否是今天、昨天还是更早以前
                if (targetDateStr1.equals(todayStr)) {
                    String format2 = format1.format(commentVO.getInsertTime1());
                    commentVO.setInsertTime(format2);
                    System.out.println("目标日期是今天");
                } else if (targetDateStr1.equals(yesterdayStr)) {
                    String format2 = format1.format(commentVO.getInsertTime1());
                    commentVO.setInsertTime("昨天 "+format2);
                    System.out.println("目标日期是昨天");
                } else {
                    String format2 = format.format(commentVO.getInsertTime1());
                    commentVO.setInsertTime(format2);
                    System.out.println("目标日期更早以前");
                }
            }
            comment.setCommentList(two);
        }
        return ResultUtil.success(one);
    }
    public static void main(String[] args) {
        String request = HttpRequestUtil.getRequest("https://restapi.amap.com/v3/distance?key=" + "4bdddca5a75e9fcf95fc8404082d3330" + "&origins=" + "105.907813,29.342846" + "&destination=" + "105.906929,29.341645" +
                "&type=" + "1");
        System.err.println(request);
    }
    public static int daysBetween(Calendar startDate, Calendar endDate) {
        // 将时间转换为毫秒
        long startTimeInMillis = startDate.getTimeInMillis();
        long endTimeInMillis = endDate.getTimeInMillis();
        // 计算日期差异并返回
        return (int) ((endTimeInMillis - startTimeInMillis) / (1000 * 60 * 60 * 24));
    }
    @ResponseBody
    @PostMapping("/base/find/findCommentListOne")
    @ApiOperation(value = "动态详情-查看一级评论下的评论", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<List<CommentVO>> findCommentListOne(CommentQuery query) {
        // 查询一级评论
        List<CommentVO> one = findCommentService.getCommentThree(query);
        for (CommentVO commentVO : one) {
            Integer id1 = commentVO.getId();
            Like like1 = likeService.selectOne(new EntityWrapper<Like>()
                    .eq("userId", appUserService.getAppUser().getId())
                    .eq("type", 2)
                    .eq("findId", id1));
            if (like1 == null){
                // 没有点赞
                commentVO.setIsLike(0);
            }else{
                commentVO.setIsLike(1);
            }
            // 假设这是您要判断的日期
            Date targetDate = commentVO.getInsertTime1();
            // 获取今天的日期
            Date today = new Date();
            // 获取昨天的日期
            Calendar yesterdayCal = Calendar.getInstance();
            yesterdayCal.add(Calendar.DAY_OF_MONTH, -1);
            Date yesterday = yesterdayCal.getTime();
            // 将目标日期、今天和昨天的日期格式化为 yyyy-MM-dd 格式的字符串
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
            String targetDateStr = sdf.format(targetDate);
            String todayStr = sdf.format(today);
            String yesterdayStr = sdf.format(yesterday);
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            SimpleDateFormat format1 = new SimpleDateFormat("HH:mm");
            // 假设这是您要判断的日期
            Date targetDate1 = commentVO.getInsertTime1();
            // 获取今天的日期
            // 获取昨天的日期
            // 将目标日期、今天和昨天的日期格式化为 yyyy-MM-dd 格式的字符串
            String targetDateStr1 = sdf.format(targetDate1);
            // 判断目标日期是否是今天、昨天还是更早以前
            if (targetDateStr1.equals(todayStr)) {
                String format2 = format1.format(commentVO.getInsertTime1());
                commentVO.setInsertTime(format2);
                System.out.println("目标日期是今天");
            } else if (targetDateStr1.equals(yesterdayStr)) {
                String format2 = format1.format(commentVO.getInsertTime1());
                commentVO.setInsertTime("昨天 "+format2);
                System.out.println("目标日期是昨天");
            } else {
                String format2 = format.format(commentVO.getInsertTime1());
                commentVO.setInsertTime(format2);
                System.out.println("目标日期更早以前");
            }
        }
        List<CommentVO> commentVOS = testing1(one.size(), query.getPageNum(), query.getPageSize(), one);
        return ResultUtil.success(commentVOS);
    }
    public static List<CommentVO> testing1(long total, long current, long size, List<CommentVO> str){
        List<CommentVO> result = new ArrayList<>();
        //获取初始化分页结构
        com.stylefeng.guns.modular.system.util.Page<CommentVO> page = new Page().getPage(total, size, current - 1);
        //获取集合下标初始值
        long startIndex = page.getStartIndex();
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
    @Autowired
    private ILikeService likeService;
    @ResponseBody
    @PostMapping("/base/find/cancelLike")
    @ApiOperation(value = "动态/评论取消点赞", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "id", value = "动态/评论id", required = true),
            @ApiImplicitParam(name = "type", value = "类型 1 = 点赞动态 2 = 点赞评论", required = true)
    })
    public ResultUtil cancelLike(Integer id,Integer type) {
        Like like = likeService.selectOne(new EntityWrapper<Like>()
                .eq("userId", appUserService.getAppUser().getId())
                .eq("type", type)
                .eq("findId", id));
        if (like!=null){
            likeService.deleteById(like.getId());
        }
        return ResultUtil.success();
    }
    @ResponseBody
    @PostMapping("/base/find/Like")
    @ApiOperation(value = "动态/评论点赞", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "id", value = "动态id", required = true),
            @ApiImplicitParam(name = "findCommentId", value = "评论id(如果点赞的是评论才传)"),
            @ApiImplicitParam(name = "type", value = "类型 1 = 点赞动态 2 = 点赞评论", required = true)
    })
    public ResultUtil Like(Integer id,Integer type,Integer findCommentId) {
        // 点赞之后要加入一条消息
        AppUser appUser = appUserService.getAppUser();
        Message message = new Message();
        message.setType(2);
        message.setFindId(id);
        message.setFindCommentId(findCommentId);
        message.setReplayUserId(appUser.getId());
        message.setInsertTime(new Date());
        switch (type){
            case 1:
                // 点赞动态
                Find find = findService.selectById(id);
                int i = find.getLikeCount() + 1;
                find.setLikeCount(i);
                findService.updateById(find);
                // 判断用户有没有点赞这条记录
                Like like = likeService.selectOne(new EntityWrapper<Like>()
                        .eq("type", type)
                        .eq("findId", findCommentId));
                if (like!=null){
                    // 说明点过赞了 取消掉 同时减少这个的
                    likeService.deleteById(like.getId());
                    Integer likeCount = find.getLikeCount();
                    find.setLikeCount(likeCount-1);
                    break;
                }
                message.setUserId(find.getUserId());
                message.setTitle("赞了你的动态");
                message.setContent(find.getTitle());
                // 判断有没有重复消息 如果有就不发了
                Message message1 = messageService.selectOne(new EntityWrapper<Message>()
                        .eq("userId", appUser.getId())
                        .eq("findId", find.getId())
                        .isNull("findCommentId"));
                if (message1 == null){
                    messageService.insert(message);
                }
                // 新增用户点赞记录
                Like like1 = new Like();
                like1.setUserId(appUser.getId());
                like1.setType(type);
                like1.setFindId(find.getId());
                likeService.insert(like1);
                break;
            case 2:
                message.setTitle("赞了你的评论");
                FindComment findComment = findCommentService.selectById(findCommentId);
                message.setContent(findComment.getContent());
                message.setUserId(findComment.getUserId());
                int i1 = findComment.getLikeCount() + 1;
                findComment.setLikeCount(i1);
                message.setContent(findComment.getContent());
                findCommentService.updateById(findComment);
                // 判断有没有重复消息 如果有就不发了
                Message message2 = messageService.selectOne(new EntityWrapper<Message>()
                        .eq("userId", appUser.getId())
                        .eq("type",3)
                        .eq("findCommentId", findComment.getId())
                        );
                if (message2 == null){
                    messageService.insert(message);
                }
                Like like2 = new Like();
                like2.setUserId(appUser.getId());
                like2.setType(type);
                like2.setFindId(findComment.getId());
                likeService.insert(like2);
                break;
        }
        return ResultUtil.success("点赞成功");
    }
    @ResponseBody
    @PostMapping("/base/find/report")
    @ApiOperation(value = "动态/评论举报", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "id", value = "动态id/评论id", required = true),
            @ApiImplicitParam(name = "content", value = "举报内容"),
            @ApiImplicitParam(name = "type", value = "类型 1 = 举报动态 2 = 举报评论", required = true)
    })
    public ResultUtil report(Integer id,String content,Integer type) {
        AuditVO content1 = auditUtil.content(content);
        switch (content1.getType()){
            case "terrorism":
                return ResultUtil.error("举报内容涉及暴恐");
            case "porn":
                return ResultUtil.error("举报内容涉及色情");
            case "ban":
                return ResultUtil.error("举报内容违禁");
            case "abuse":
                return ResultUtil.error("举报内容涉及辱骂");
            case "ad":
                return ResultUtil.error("举报内容涉及广告");
            case "politics":
                return ResultUtil.error("举报内容涉及政治");
        }
        FindReport findReport = new FindReport();
        switch (type){
            case 1:
                findReport.setReported(findService.selectById(id).getUserId());
                findReport.setUserId(appUserService.getAppUser().getId());
                findReport.setFindId(id);
                break;
            case 2:
                FindComment findComment = findCommentService.selectById(id);
                findReport.setReported(findCommentService.selectById(id).getUserId());
                findReport.setUserId(appUserService.getAppUser().getId());
                findReport.setCommentId(id);
                findReport.setFindId(findComment.getFindId());
                break;
        }
        findReport.setInsertTime(new Date());
        findReport.setContent(content);
        reportService.insert(findReport);
        return ResultUtil.success("举报成功");
    }
    @ResponseBody
    @PostMapping("/base/find/findList")
    @ApiOperation(value = "主页", tags = {"发现"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public ResultUtil<List<FindVO>> findList(FindQuery query) {
        EntityWrapper<Find> wrapper = new EntityWrapper<>();
        if (StringUtils.hasLength(query.getUserNameOrTitle())){
            wrapper.like("title",query.getUserNameOrTitle());
        }
        List<FindVO> result = findService.findList(query.getUserNameOrTitle());
        for (FindVO find : result) {
            FindVO temp = new FindVO();
            BeanUtils.copyProperties(find,temp);
            Like like = likeService.selectOne(new EntityWrapper<Like>()
                    .eq("userId", appUserService.getAppUser().getId())
                    .eq("type", 1)
                    .eq("findId", find.getId()));
            if (like == null){
                // 没有点赞
                find.setIsLike(0);
            }else{
                find.setIsLike(1);
            }
            // 计算每个动态的评论数量
            int size = findCommentService.selectList(new EntityWrapper<FindComment>()
                    .eq("findId", find.getId())
                    .eq("isShow", 1)).size();
            find.setComment(size);
        }
        List<FindVO> testing = testing(result.size(), query.getPageNum(), query.getPageSize(), result);
        return ResultUtil.success(testing);
    }
    public static List<FindVO> testing(long total, long current, long size, List<FindVO> str){
        List<FindVO> result = new ArrayList<>();
        //获取初始化分页结构
        com.stylefeng.guns.modular.system.util.Page<FindVO> page = new Page().getPage(total, size, current - 1);
        //获取集合下标初始值
        long startIndex = page.getStartIndex();
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/api/HouseResourceController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/api/HousingDemandController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/api/RegionController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/api/SportsController.java
New file
@@ -0,0 +1,2259 @@
package com.stylefeng.guns.modular.api;
import java.io.PrintWriter;
import java.math.RoundingMode;
import java.security.PrivilegedAction;
import java.sql.Timestamp;
import java.time.LocalTime;
import java.util.Date;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.modular.system.dto.AddUserWatchDTO;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.model.Package;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.Page;
import com.stylefeng.guns.modular.system.vo.*;
import com.stylefeng.guns.modular.system.dto.CourseQuery;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import net.bytebuddy.asm.Advice;
import org.omg.CORBA.CODESET_INCOMPATIBLE;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import sun.java2d.pipe.AlphaPaintPipe;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.crypto.Data;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author 无关风月
 * @Date 2024/2/6 18:25
 */
@RestController
@RequestMapping("")
public class SportsController {
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private IBannerService bannerService;
    @Autowired
    private IFitnessPositionService fitnessPositionService;
    @Autowired
    private IFitnessTypeService fitnessTypeService;
    @Autowired
    private ICourseService courseService;
    @Autowired
    private IUserCollectService collectService;
    @Autowired
    private IPackageService packageService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private IOrderCourseService orderCourseService;
    @Autowired
    private ICourseVideoService courseVideoService;
    @Autowired
    private ICouponService couponService;
    @Autowired
    private ICouponReceiveService couponReceiveService;
    @Autowired
    private ISysSetService sysSetService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    public synchronized String getOrderNum() throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        return "LO" + sdf.format(new Date()) + UUIDUtil.getRandomCode(5);
    }
    @Autowired
    private IRechargeService rechargeService;
    @PostMapping("/iospay")
    public ResultUtil iosPay(Integer orderId,String transactionId, String payload) {
        System.err.println("苹果内购校验开始,交易ID:" + transactionId + " base64校验体:" + payload);
        //线上环境验证
        String verifyResult = IosVerifyUtil.buyAppVerify(payload, 1);
        if (verifyResult == null) {
            return ResultUtil.error("苹果验证失败,返回数据为空");
        } else {
            System.err.println("线上,苹果平台返回JSON:" + verifyResult);
            JSONObject appleReturn = JSONObject.parseObject(verifyResult);
            String states = appleReturn.getString("status");
            //无数据则沙箱环境验证
            if ("21007".equals(states)) {
                verifyResult = IosVerifyUtil.buyAppVerify(payload, 0);
                System.err.println("沙盒环境,苹果平台返回JSON:" + verifyResult);
                appleReturn = JSONObject.parseObject(verifyResult);
                states = appleReturn.getString("status");
            }
            System.err.println("苹果平台返回值:appleReturn" + appleReturn);
            // 前端所提供的收据是有效的    验证成功
            if (states.equals("0")) {
                String receipt = appleReturn.getString("receipt");
                JSONObject returnJson = JSONObject.parseObject(receipt);
                String inApp = returnJson.getString("in_app");
                List<HashMap> inApps = JSONObject.parseArray(inApp, HashMap.class);
                if (!CollectionUtils.isEmpty(inApps)) {
                    ArrayList<String> transactionIds = new ArrayList<String>();
                    for (HashMap app : inApps) {
                        transactionIds.add((String) app.get("transaction_id"));
                    }
                    //交易列表包含当前交易,则认为交易成功
                    if (transactionIds.contains(transactionId)) {
                        //处理业务逻辑
                        System.err.println("交易成功,新增并处理订单:{}");
                        return ResultUtil.success("充值成功");
                    }
                    return ResultUtil.error("当前交易不在交易列表中");
                }
                return ResultUtil.error("未能获取获取到交易列表");
            } else {
                return ResultUtil.error("支付失败,错误码:" + states);
            }
        }
    }
    @ResponseBody
    @PostMapping("/base/sports/order")
    @ApiOperation(value = "下单操作", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "payType", value = "支付类型 1=微信 2=支付宝 3=余额 4=苹果支付", required = true),
            @ApiImplicitParam(name = "id", value = "课程id/套餐id"),
            @ApiImplicitParam(name = "buyType", value = "购买类型 1=购买课程 2=购买套餐 3=充值余额", required = true),
            @ApiImplicitParam(name = "orderMoney", value = "订单总额"),
            @ApiImplicitParam(name = "realMoney", value = "使用了优惠券之后的金额 没有使用不填"),
            @ApiImplicitParam(name = "couponId", value = "优惠券id"),
    })
    public ResultUtil order(Integer payType,
                          Integer id,
                          Integer buyType,
                          Integer couponId,
                          BigDecimal orderMoney,
                          BigDecimal realMoney) throws Exception {
        AppUser appUser = appUserService.getAppUser();
        BaseWarpper baseWarpper = new BaseWarpper();
        switch (buyType){
            case 1:
                Course course = courseService.selectById(id);
                BigDecimal amount = fitnessPositionService.selectById(course.getPositionId()).getAmount();
                // 购买课程
                OrderCourse orderCourse = new OrderCourse();
                orderCourse.setCode(this.getOrderNum());
                orderCourse.setUserId(appUser.getId());
                orderCourse.setInsertTime(new Date());
                orderCourse.setPayType(payType);
                orderCourse.setAmount(amount);
                if (couponId!=null){
                    CouponReceive couponReceive = couponReceiveService.selectById(couponId);
                    Coupon coupon = couponService.selectById(couponReceive.getCouponId());
                    BigDecimal subtract = amount.subtract(coupon.getReduction());
                    orderCourse.setRealMoney(subtract);
                }else{
                    orderCourse.setRealMoney(amount);
                }
                orderCourse.setCouponId(couponId);
                orderCourse.setState(1);
                orderCourse.setCourseId(id);
                orderCourseService.insert(orderCourse);
                baseWarpper.setId(orderCourse.getId());
                return ResultUtil.success(baseWarpper);
            case 2:
                Order order = new Order();
                // 套餐价格
                BigDecimal price = packageService.selectById(id).getPrice();
                if (couponId!=null){
                    CouponReceive couponReceive = couponReceiveService.selectById(couponId);
                    Coupon coupon = couponService.selectById(couponReceive.getCouponId());
                    BigDecimal subtract = price.subtract(coupon.getReduction());
                    order.setRealMoney(subtract);
                }else{
                    order.setRealMoney(price);
                }
                // 购买套餐
                order.setAmount(price);
                order.setCode(this.getOrderNum());
                order.setUserId(appUser.getId());
                order.setPayType(payType);
                order.setCouponId(couponId);
                order.setPackageId(id);
                order.setState(1);
                order.setInsertTime(new Date());
                orderService.insert(order);
                baseWarpper.setId(order.getId());
                return ResultUtil.success(baseWarpper);
            case 3:
                // 充值余额
                Recharge recharge = new Recharge();
                recharge.setUserId(appUser.getId());
                recharge.setAmount(orderMoney);
                recharge.setPayType(payType);
                recharge.setInsertTime(new Date());
                recharge.setCode(this.getOrderNum());
                recharge.setState(1);
                rechargeService.insert(recharge);
                baseWarpper.setId(recharge.getId());
                return ResultUtil.success(baseWarpper);
        }
        return ResultUtil.success();
    }
    /**
     * 购买套餐微信支付回调
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/wxPayBuyPackage")
    public void wxPayBuyPackage(HttpServletRequest request, HttpServletResponse response) {
        try {
            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
            if (null != map) {
                String out_trade_no = map.get("out_trade_no");
                String transaction_id = map.get("transaction_id");
                String result = map.get("result");
                // 订单id
                String s = out_trade_no.split("_")[0];
                // 购买类型 1购买课程 2购买套餐 3充值余额
                String s1 = out_trade_no.split("_")[1];
                Integer integer = Integer.valueOf(s);
                Integer integer1 = Integer.valueOf(s1);
                Order order = orderService.selectById(integer);
                order.setOrderNumber(out_trade_no);
                order.setState(2);
                order.setPayTime(new Date());
                order.setPayType(1);
                orderService.updateById(order);
                PrintWriter out = response.getWriter();
                out.write(result);
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 购买课程微信支付回调
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/wxPayBuyCourse")
    public void wxPayBuyCourse(HttpServletRequest request, HttpServletResponse response) {
        try {
            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
            if (null != map) {
                String out_trade_no = map.get("out_trade_no");
                String transaction_id = map.get("transaction_id");
                String result = map.get("result");
                // 订单id
                String s = out_trade_no.split("_")[0];
                // 购买类型 1购买课程 2购买套餐 3充值余额
                String s1 = out_trade_no.split("_")[1];
                Integer integer = Integer.valueOf(s);
                Integer integer1 = Integer.valueOf(s1);
                OrderCourse orderCourse = orderCourseService.selectById(integer);
                orderCourse.setOrderNumber(out_trade_no);
                orderCourse.setState(2);
                orderCourse.setPayType(1);
                orderCourse.setPayTime(new Date());
                orderCourseService.updateById(orderCourse);
                PrintWriter out = response.getWriter();
                out.write(result);
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 购买余额微信支付回调
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/wxPayBuyBalance")
    public void addVipPaymentWeChatCallback(HttpServletRequest request, HttpServletResponse response) {
        try {
            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
            if (null != map) {
                String out_trade_no = map.get("out_trade_no");
                String transaction_id = map.get("transaction_id");
                String result = map.get("result");
                // 订单id
                String s = out_trade_no.split("_")[0];
                // 购买类型 1购买课程 2购买套餐 3充值余额
                String s1 = out_trade_no.split("_")[1];
                Integer integer = Integer.valueOf(s);
                Integer integer1 = Integer.valueOf(s1);
                // 充值余额
                Recharge recharge = rechargeService.selectById(integer);
                recharge.setOrderNumber(out_trade_no);
                recharge.setState(2);
                recharge.setPayTime(new Date());
                recharge.setPayType(1);
                rechargeService.updateById(recharge);
                PrintWriter out = response.getWriter();
                out.write(result);
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Autowired
    private IInviteService inviteService;
    @ResponseBody
    @PostMapping("/base/sports/pay")
    @ApiOperation(value = "支付", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "payType", value = "支付类型 1=微信 2=支付宝 3=余额 4=苹果支付", required = true),
            @ApiImplicitParam(name = "id", value = "订单id", required = true),
            @ApiImplicitParam(name = "buyType", value = "购买类型 1=购买课程 2=购买套餐 3=充值余额", required = true),
            @ApiImplicitParam(name = "transactionReceipt", value = "苹果账单"),
            @ApiImplicitParam(name = "transactionIdentifier", value = "苹果订单id"),
            @ApiImplicitParam(name = "orderMoney", value = "订单金额"),
    })
    public ResultUtil pay(Integer payType,
                          Integer id,
                          Integer buyType,
                          String transactionReceipt,
                          String transactionIdentifier,
                          BigDecimal orderMoney) throws Exception {
        AppUser appUser = appUserService.getAppUser();
        OrderCourse orderCourse = orderCourseService.selectOne(new EntityWrapper<OrderCourse>()
        .eq("id",id)
        .eq("userId",appUser.getId()));
        Order order = orderService.selectOne(new EntityWrapper<Order>()
                .eq("id",id)
                .eq("userId",appUser.getId()));
        Recharge recharge1 = rechargeService.selectOne(new EntityWrapper<Recharge>()
                .eq("id",id)
                .eq("userId",appUser.getId()));
        if (recharge1 != null){
            payType = recharge1.getPayType();
        }else if (order!=null){
            payType = order.getPayType();
        } else if (orderCourse != null){
            payType = orderCourse.getPayType();
        }
        switch (payType){
            case 1:
                switch (buyType){
                    case 1:
                        return payMoneyUtil.weixinpay
                                ("购买课程下单支付", "",
                                        id + "_" +buyType+"_"+
                                        UUIDUtil.getRandomCode(8),
                                        orderCourse.getRealMoney().toString(),
                                        "/base/wxPayBuyCourse", "APP", "");
                    case 2:
                        return payMoneyUtil.weixinpay
                                ("购买套餐下单支付", "",
                                        id + "_" +buyType+"_"+
                                                UUIDUtil.getRandomCode(8),
                                        order.getRealMoney().toString(),
                                        "/base/wxPayBuyPackage", "APP", "");
                    case 3:
                        return payMoneyUtil.weixinpay
                                ("充值余额下单支付", "",
                                        id + "_" +buyType+"_"+
                                                UUIDUtil.getRandomCode(8),
                                        recharge1.getAmount().toString(),
                                        "/base/wxPayBuyBalance", "APP", "");
                }
                break;
            case 2:
                switch (buyType){
                    case 1:
                        return payMoneyUtil.alipay
                                ("购买课程下单支付",
                                        "购买课程下单支付",
                                        "",
                                        id + "_"+buyType+"_" + UUIDUtil.getRandomCode(8),
                                        orderCourse.getRealMoney().toString(), "/base/aliPayBuyCourse");
                    case 2:
                        return payMoneyUtil.alipay
                                ("购买套餐下单支付",
                                        "购买套餐下单支付",
                                        "",
                                        id + "_"+buyType+"_" + UUIDUtil.getRandomCode(8),
                                        order.getRealMoney().toString(), "/base/aliPayBuyPackage");
                    case 3:
                        return payMoneyUtil.alipay
                                ("充值余额下单支付",
                                        "充值余额下单支付",
                                        "",
                                        id + "_"+buyType+"_" + UUIDUtil.getRandomCode(8),
                                        recharge1.getAmount().toString(), "/base/aliPayBuyBalance");
                }
                break;
            case 3:
                BigDecimal divisor = new BigDecimal("100");
                // 计算提成
                SysSet sysSet = sysSetService.selectById(1);
                // 邀请人可获得被邀请人消费金额比例
                String people = sysSet.getPeople();
                // 团队长可获得团员消费金额比例
                String header = sysSet.getHeader();
                switch (buyType){
                    case 1:
                        // 购买课程
                        BigDecimal realMoney = orderCourse.getRealMoney();
                        if (appUser.getBalance().compareTo(realMoney)<0) {
                            return ResultUtil.error("余额不足");
                        }
                        orderCourse.setState(2);
                        orderCourse.setPayType(3);
                        orderCourse.setPayTime(new Date());
                        orderCourseService.updateById(orderCourse);
                        BigDecimal balance = appUser.getBalance();
                        BigDecimal subtract = balance.subtract(realMoney);
                        appUser.setBalance(subtract);
                        orderCourse.setAmount(realMoney);
                        appUserService.updateById(appUser);
                        // 邀请人比例
                        BigDecimal res = new BigDecimal(people);
                        BigDecimal bigDecimal = res.divide(divisor);
                        // 获取金额
                        BigDecimal multiply = realMoney.multiply(bigDecimal);
                        BigDecimal bigDecimal1 = multiply.setScale(2, BigDecimal.ROUND_DOWN);
                        // 如果使用了优惠券将优惠券修改为已消费
                        if (orderCourse.getCouponId()!=null){
                            CouponReceive couponReceive1 = couponReceiveService.selectById(orderCourse.getCouponId());
                            couponReceive1.setState(2);
                            couponReceiveService.updateById(couponReceive1);
                        }
                        // 如果当前用户有邀请人
                        if (appUser.getInviteUserId()!=null){
                            if (StringUtils.hasLength(people)){
                                Invite invite = new Invite();
                                invite.setUserId(appUser.getId());
                                invite.setInsertTime(new Date());
                                invite.setAmount(bigDecimal1);
                                invite.setConsume(realMoney);
                                invite.setGiftUserId(appUser.getInviteUserId());
                                invite.setType(1);
                                inviteService.insert(invite);
                                // 给用户加余额
                                AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId());
                                BigDecimal balance1 = appUser1.getBalance();
                                BigDecimal add = balance1.add(bigDecimal1);
                                appUser1.setBalance(add);
                                appUserService.updateById(appUser1);
                            }
                            if (StringUtils.hasLength(header)){
                                // 先判断当前用户有没有团队长
                                if (appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()!=null){
                                    // 有团队长
                                    // 邀请人比例
                                    BigDecimal res1 = new BigDecimal(header);
                                    BigDecimal bigDecimal2 = res1.divide(divisor);
                                    BigDecimal multiply1 = realMoney.multiply(bigDecimal2);
                                    BigDecimal bigDecimal3 = multiply1.setScale(2, BigDecimal.ROUND_DOWN);
                                    Invite invite = new Invite();
                                    invite.setUserId(appUser.getId());
                                    invite.setInsertTime(new Date());
                                    invite.setAmount(bigDecimal3);
                                    invite.setConsume(realMoney);
                                    invite.setGiftUserId(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                                    invite.setType(2);
                                    inviteService.insert(invite);
                                    // 给用户加余额
                                    AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                                    BigDecimal balance1 = appUser1.getBalance();
                                    BigDecimal add = balance1.add(bigDecimal1);
                                    appUser1.setBalance(add);
                                    appUserService.updateById(appUser1);
                                }
                            }
                        }
                        break;
                    case 2:
                        BigDecimal realMoney1 = order.getRealMoney();
                        if (appUser.getBalance().compareTo(realMoney1)<0) {
                            return ResultUtil.error("余额不足");
                        }
                        order.setState(2);
                        order.setPayType(3);
                        order.setPayTime(new Date());
                        orderService.updateById(order);
                        BigDecimal balance1 = appUser.getBalance();
                        BigDecimal subtract1 = balance1.subtract(realMoney1);
                        order.setAmount(realMoney1);
                        appUser.setBalance(subtract1);
                        appUserService.updateById(appUser);
                        if (order.getCouponId()!=null){
                            CouponReceive couponReceive2 = couponReceiveService.selectById(order.getCouponId());
                            couponReceive2.setState(2);
                            couponReceiveService.updateById(couponReceive2);
                        }
                        BigDecimal res3 = new BigDecimal(people);
                        BigDecimal bigDecimal9 = res3.divide(divisor);
                        // 获取金额
                        BigDecimal multiply5 = realMoney1.multiply(bigDecimal9);
                        BigDecimal bigDecimal6 = multiply5.setScale(2, BigDecimal.ROUND_DOWN);
                        // 如果当前用户有邀请人
                        if (appUser.getInviteUserId()!=null){
                            if (StringUtils.hasLength(people)){
                                Invite invite = new Invite();
                                invite.setUserId(appUser.getId());
                                invite.setInsertTime(new Date());
                                invite.setAmount(bigDecimal6);
                                invite.setConsume(realMoney1);
                                invite.setGiftUserId(appUser.getInviteUserId());
                                invite.setType(1);
                                inviteService.insert(invite);
                                // 给用户加余额
                                AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId());
                                BigDecimal balance3 = appUser1.getBalance();
                                BigDecimal add = balance3.add(bigDecimal6);
                                appUser1.setBalance(add);
                                appUserService.updateById(appUser1);
                            }
                            if (StringUtils.hasLength(header)){
                                // 先判断当前用户有没有团队长
                                if (appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()!=null){
                                    BigDecimal res4 = new BigDecimal(header);
                                    BigDecimal bigDecimal2 = res4.divide(divisor);
                                    // 有团队长
                                    // 奖励金额
                                    BigDecimal multiply1 = realMoney1.multiply(bigDecimal2);
                                    BigDecimal bigDecimal3 = multiply1.setScale(2, BigDecimal.ROUND_DOWN);
                                    Invite invite = new Invite();
                                    invite.setUserId(appUser.getId());
                                    invite.setInsertTime(new Date());
                                    invite.setAmount(bigDecimal3);
                                    invite.setConsume(realMoney1);
                                    invite.setGiftUserId(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                                    invite.setType(2);
                                    inviteService.insert(invite);
                                    // 给用户加余额
                                    AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                                    BigDecimal balance5 = appUser1.getBalance();
                                    BigDecimal add = balance5.add(bigDecimal3);
                                    appUser1.setBalance(add);
                                    appUserService.updateById(appUser1);
                                }
                            }
                        }
                        break;
                }
                break;
            case 4:
                switch (buyType){
                    // 苹果支付 全部用余额来购买 如果余额不足 提示购买余额
                    case 1:
                        // 购买课程
                        BigDecimal realMoney = orderCourse.getRealMoney();
                        if (appUser.getBalance().compareTo(realMoney)<0) {
                            return ResultUtil.error("余额不足");
                        }
                        break;
                    case 2:
                        BigDecimal realMoney1 = order.getRealMoney();
                        if (appUser.getBalance().compareTo(realMoney1)<0) {
                            return ResultUtil.error("余额不足");
                        }
                        break;
                    case 3:
                        recharge1.setState(2);
                        recharge1.setPayType(3);
                        rechargeService.updateById(recharge1);
                        BigDecimal amount = recharge1.getAmount();
                        BigDecimal add = appUser.getBalance().add(amount);
                        appUser.setBalance(add);
                        appUserService.updateById(appUser);
                        break;
                }
//                if (StringUtils.hasLength(transactionReceipt)){
//                    // 调用苹果 查询支付结果
//                    String verifyResult  = IosVerifyUtil.buyAppVerify(transactionReceipt, 0);
//                    if (verifyResult == null) {
//                        return ResultUtil.error("苹果验证失败,返回数据为空");
//                    }else{
//                        JSONObject appleReturn = JSONObject.parseObject(verifyResult);
//                        String states = appleReturn.getString("status");
//                        //无数据则沙箱环境验证
//                        if ("21007".equals(states)) {
//                            verifyResult = IosVerifyUtil.buyAppVerify(transactionReceipt, 0);
//                            System.err.println("沙盒环境,苹果平台返回JSON:" + verifyResult);;
//                            appleReturn = JSONObject.parseObject(verifyResult);
//                            states = appleReturn.getString("status");
//                        }
//                        if (states.equals("0")) {
//                            String receipt1 = appleReturn.getString("receipt");
//                            JSONObject returnJson = JSONObject.parseObject(receipt1);
//                            String inApp = returnJson.getString("in_app");
//                            List<HashMap> inApps = JSONObject.parseArray(inApp, HashMap.class);
//                            if (inApps!=null) {
//                                // 判断交易列表有没有包含当前订单
//                            }
//                            return ResultUtil.error("未能获取获取到交易列表");
//                        } else {
//                            return ResultUtil.error("支付失败,错误码:" + states);
//                        }
//                    }
//                }
                break;
        }
        return ResultUtil.success();
    }
    /**
     * 购买课程支付支付宝回调
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/aliPayBuyCourse")
    public void addVipPaymentAliCallback(HttpServletRequest request, HttpServletResponse response) {
        try {
            Map<String, String> map = payMoneyUtil.alipayCallback(request);
            if (null != map) {
                String out_trade_no = map.get("out_trade_no");
                String trade_no = map.get("trade_no");
                // 订单id
                String s = out_trade_no.split("_")[0];
                // 购买类型 1购买课程 2购买套餐 3充值余额
                String s1 = out_trade_no.split("_")[1];
                Integer integer = Integer.valueOf(s);
                Integer integer1 = Integer.valueOf(s1);
                OrderCourse orderCourse = orderCourseService.selectById(integer);
                orderCourse.setOrderNumber(out_trade_no);
                orderCourse.setState(2);
                orderCourse.setPayType(2);
                orderCourse.setPayTime(new Date());
                orderCourseService.updateById(orderCourse);
                // 如果使用了优惠券将优惠券修改为已消费
                if (orderCourse.getCouponId()!=null){
                    CouponReceive couponReceive1 = couponReceiveService.selectById(orderCourse.getCouponId());
                    couponReceive1.setState(2);
                    couponReceiveService.updateById(couponReceive1);
                }
                BigDecimal divisor = new BigDecimal("100");
                // 计算提成
                SysSet sysSet = sysSetService.selectById(1);
                // 邀请人可获得被邀请人消费金额比例
                String people = sysSet.getPeople();
                // 团队长可获得团员消费金额比例
                String header = sysSet.getHeader();
                // 邀请人比例
                BigDecimal bigDecimal = new BigDecimal(people).divide(divisor);
                // 获取金额
                BigDecimal multiply = orderCourse.getRealMoney().multiply(bigDecimal);
                BigDecimal bigDecimal1 = multiply.setScale(2, BigDecimal.ROUND_DOWN);
                AppUser appUser = appUserService.selectById(orderCourse.getUserId());
                // 如果当前用户有邀请人
                if (appUser.getInviteUserId()!=null){
                    if (StringUtils.hasLength(people)){
                        Invite invite = new Invite();
                        invite.setUserId(appUser.getId());
                        invite.setInsertTime(new Date());
                        invite.setAmount(bigDecimal1);
                        invite.setConsume(orderCourse.getRealMoney());
                        invite.setGiftUserId(appUser.getInviteUserId());
                        invite.setType(1);
                        inviteService.insert(invite);
                        // 给用户加余额
                        AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId());
                        BigDecimal balance1 = appUser1.getBalance();
                        BigDecimal add = balance1.add(bigDecimal1);
                        appUser1.setBalance(add);
                        appUserService.updateById(appUser1);
                    }
                    if (StringUtils.hasLength(header)){
                        // 先判断当前用户有没有团队长
                        if (appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()!=null){
                            // 有团队长
                            BigDecimal bigDecimal2 = new BigDecimal(header).divide(divisor);
                            BigDecimal multiply1 = orderCourse.getRealMoney().multiply(bigDecimal2);
                            BigDecimal bigDecimal3 = multiply1.setScale(2, BigDecimal.ROUND_DOWN);
                            Invite invite = new Invite();
                            invite.setUserId(appUser.getId());
                            invite.setInsertTime(new Date());
                            invite.setAmount(bigDecimal3);
                            invite.setConsume(orderCourse.getRealMoney());
                            invite.setGiftUserId(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                            invite.setType(2);
                            inviteService.insert(invite);
                            // 给用户加余额
                            AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                            BigDecimal balance1 = appUser1.getBalance();
                            BigDecimal add = balance1.add(bigDecimal1);
                            appUser1.setBalance(add);
                            appUserService.updateById(appUser1);
                        }
                    }
                }
                PrintWriter out = response.getWriter();
                out.write("success");
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 购买套餐支付支付宝回调
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/aliPayBuyPackage")
    public void aliPayBuyPackage(HttpServletRequest request, HttpServletResponse response) {
        try {
            Map<String, String> map = payMoneyUtil.alipayCallback(request);
            if (null != map) {
                String out_trade_no = map.get("out_trade_no");
                String trade_no = map.get("trade_no");
                // 订单id
                String s = out_trade_no.split("_")[0];
                // 购买类型 1购买课程 2购买套餐 3充值余额
                String s1 = out_trade_no.split("_")[1];
                Integer integer = Integer.valueOf(s);
                Integer integer1 = Integer.valueOf(s1);
                Order order = orderService.selectById(integer);
                order.setOrderNumber(out_trade_no);
                order.setState(2);
                order.setPayTime(new Date());
                order.setPayType(2);
                orderService.updateById(order);
                BigDecimal divisor = new BigDecimal("100");
                // 计算提成
                SysSet sysSet = sysSetService.selectById(1);
                // 邀请人可获得被邀请人消费金额比例
                String people = sysSet.getPeople();
                // 团队长可获得团员消费金额比例
                String header = sysSet.getHeader();
                // 邀请人比例
                BigDecimal bigDecimal = new BigDecimal(people).divide(divisor);
                // 获取金额
                BigDecimal multiply = order.getRealMoney().multiply(bigDecimal);
                BigDecimal bigDecimal1 = multiply.setScale(2, BigDecimal.ROUND_DOWN);
                // 如果使用了优惠券将优惠券修改为已消费
                if (order.getCouponId()!=null){
                    CouponReceive couponReceive1 = couponReceiveService.selectById(order.getCouponId());
                    couponReceive1.setState(2);
                    couponReceiveService.updateById(couponReceive1);
                }
                AppUser appUser = appUserService.selectById(order.getUserId());
                // 如果当前用户有邀请人
                if (appUser.getInviteUserId()!=null){
                    if (StringUtils.hasLength(people)){
                        Invite invite = new Invite();
                        invite.setUserId(appUser.getId());
                        invite.setInsertTime(new Date());
                        invite.setAmount(bigDecimal1);
                        invite.setConsume(order.getRealMoney());
                        invite.setGiftUserId(appUser.getInviteUserId());
                        invite.setType(1);
                        inviteService.insert(invite);
                        // 给用户加余额
                        AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId());
                        BigDecimal balance1 = appUser1.getBalance();
                        BigDecimal add = balance1.add(bigDecimal1);
                        appUser1.setBalance(add);
                        appUserService.updateById(appUser1);
                    }
                    if (StringUtils.hasLength(header)){
                        // 先判断当前用户有没有团队长
                        if (appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()!=null){
                            // 有团队长
                            BigDecimal bigDecimal2 = new BigDecimal(header).divide(divisor);
                            BigDecimal multiply1 = order.getRealMoney().multiply(bigDecimal2);
                            BigDecimal bigDecimal3 = multiply1.setScale(2, BigDecimal.ROUND_DOWN);
                            Invite invite = new Invite();
                            invite.setUserId(appUser.getId());
                            invite.setInsertTime(new Date());
                            invite.setAmount(bigDecimal3);
                            invite.setConsume(order.getRealMoney());
                            invite.setGiftUserId(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                            invite.setType(2);
                            inviteService.insert(invite);
                            // 给用户加余额
                            AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId());
                            BigDecimal balance1 = appUser1.getBalance();
                            BigDecimal add = balance1.add(bigDecimal1);
                            appUser1.setBalance(add);
                            appUserService.updateById(appUser1);
                        }
                    }
                }
                PrintWriter out = response.getWriter();
                out.write("success");
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 购买余额支付支付宝回调
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/aliPayBuyBalance")
    public void aliPayBuyBalance(HttpServletRequest request, HttpServletResponse response) {
        try {
            Map<String, String> map = payMoneyUtil.alipayCallback(request);
            if (null != map) {
                String out_trade_no = map.get("out_trade_no");
                String trade_no = map.get("trade_no");
                // 订单id
                String s = out_trade_no.split("_")[0];
                // 购买类型 1购买课程 2购买套餐 3充值余额
                String s1 = out_trade_no.split("_")[1];
                Integer integer = Integer.valueOf(s);
                Integer integer1 = Integer.valueOf(s1);
                // 充值余额
                Recharge recharge = rechargeService.selectById(integer);
                recharge.setOrderNumber(out_trade_no);
                recharge.setState(2);
                recharge.setPayTime(new Date());
                recharge.setPayType(1);
                rechargeService.updateById(recharge);
                AppUser appUser = appUserService.selectById(recharge.getUserId());
                BigDecimal balance = appUser.getBalance();
                BigDecimal add = balance.add(recharge.getAmount());
                appUser.setBalance(add);
                appUserService.updateById(appUser);
                PrintWriter out = response.getWriter();
                out.write("success");
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @ResponseBody
    @PostMapping("/base/sports/success")
    @ApiOperation(value = "支付成功-页面", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "int", required = true),
    })
    public ResultUtil<CouponVO> success(Integer orderId) {
        CouponVO couponVO = new CouponVO();
        // 查询后台有没有配置首次下单赠送奖品
        SysSet sysSet = sysSetService.selectById(1);
        Integer isGive = sysSet.getIsGive();
        if (isGive==1){
            // 判断用户是不是首次购买
            int size = orderCourseService.selectList(new EntityWrapper<OrderCourse>().eq("userId", appUserService.getAppUser().getId())
                    .eq("state", 2)).size();
            int size1 = orderService.selectList(new EntityWrapper<Order>().eq("userId", appUserService.getAppUser().getId())
                    .eq("state", 2)).size();
            if (size+size1 == 1){
                // 展示文案
                couponVO.setInfo(1);
            }else{
                couponVO.setInfo(0);
            }
        }else{
            couponVO.setInfo(0);
        }
        CouponReceive couponReceive = new CouponReceive();
        OrderCourse orderCourse = orderCourseService.selectOne(new EntityWrapper<OrderCourse>()
        .eq("id",orderId)
        .eq("userId",appUserService.getAppUser().getId()));
        Date date1 = new Date();
        if (orderCourse==null){
            Order order = orderService.selectById(orderId);
            if (order.getCouponId()!=null){
                // 再送一张优惠券
                CouponReceive coupon1 = couponReceive.selectById(order.getCouponId());
                Coupon coupon = couponService.selectById(coupon1.getCouponId());
                if (coupon.getIsDelete() == 0){
                    // 判断优惠券类型
                    if (coupon.getTimeType() == 1){
                        // 领取后xx天
                        Integer afterDay = coupon.getAfterDay();
                        LocalDate localDate = LocalDate.now().plusDays(afterDay);
                        Date date = DateUtils.toDate(localDate);
                        couponReceive.setUserId(appUserService.getAppUser().getId());
                        couponReceive.setCouponId(coupon.getId());
                        couponReceive.setReceiveTime(new Date());
                        couponReceive.setReceiveType(2);
                        couponReceive.setStartTime(new Date());
                        couponReceive.setEndTime(date);
                        couponReceive.setState(1);
                    couponReceiveService.insert(couponReceive);
                    }else if (!date1.after(coupon.getEndTime())){
                        // 指定时间段
                        couponReceive.setUserId(appUserService.getAppUser().getId());
                        couponReceive.setCouponId(coupon.getId());
                        couponReceive.setReceiveTime(new Date());
                        couponReceive.setReceiveType(2);
                        couponReceive.setStartTime(coupon.getStartTime());
                        couponReceive.setEndTime(coupon.getEndTime());
                        couponReceive.setState(1);
                    couponReceiveService.insert(couponReceive);
                    }
                    couponVO.setName(coupon.getCouponName());
                    couponVO.setMoney(coupon.getMoney());
                    couponVO.setReduction(coupon.getReduction());
                    couponVO.setCouponId(coupon.getId());
                    SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                    SimpleDateFormat format3 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                    String format1 = format.format(couponReceive.getStartTime());
                    couponVO.setStartTime(format1);
                    String format2 = format3.format(couponReceive.getEndTime());
                    couponVO.setEndTime(format2);
                    return ResultUtil.success(couponVO);
                }
            }
        }else{
            // 查询是否有购课赠送优惠券
            Course course = courseService.selectById(orderCourse.getCourseId());
            // 如果配置了该课程购课赠送优惠券
            List<Coupon> coupons = couponService.selectList(new EntityWrapper<Coupon>()
                    .eq("grantType", 2)
                    .eq("buyCourseId", course.getPositionId()));
            if (coupons.size()>0){
                for (Coupon coupon : coupons) {
                    if (coupon.getTimeType() == 1 && coupon.getIsDelete() == 0){
                        // 领取后xx天
                        Integer afterDay = coupon.getAfterDay();
                        LocalDate localDate = LocalDate.now().plusDays(afterDay);
                        couponReceive.setUserId(appUserService.getAppUser().getId());
                        couponReceive.setCouponId(coupon.getId());
                        couponReceive.setReceiveTime(new Date());
                        couponReceive.setReceiveType(2);
                        Date startTime = new Date();
                        Date endTime = DateUtils.toDate(localDate);
                        LocalDateTime localStartDateTime = LocalDateTime.ofInstant(startTime.toInstant(), java.time.ZoneId.systemDefault());
                        LocalDateTime localEndDateTime = LocalDateTime.ofInstant(endTime.toInstant(), java.time.ZoneId.systemDefault());
                        // 设置开始时间的时分秒为00:00:00
                        LocalDateTime startOfDay = localStartDateTime.toLocalDate().atStartOfDay();
                        Timestamp startTimestamp = Timestamp.valueOf(startOfDay);
                        startTime = new Date(startTimestamp.getTime());
                        // 设置结束时间的时分秒为23:59:59
                        LocalDate endDate = localEndDateTime.toLocalDate();
                        LocalDateTime endOfDay = endDate.atTime(23, 59, 59);
                        Timestamp endTimestamp = Timestamp.valueOf(endOfDay);
                        endTime = new Date(endTimestamp.getTime());
                        couponReceive.setStartTime(startTime);
                        couponReceive.setEndTime(endTime);
                        couponReceive.setState(1);
                        couponReceiveService.insert(couponReceive);
                        couponVO.setName(coupon.getCouponName());
                        couponVO.setMoney(coupon.getMoney());
                        couponVO.setReduction(coupon.getReduction());
                        couponVO.setCouponId(coupon.getId());
                        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                        SimpleDateFormat format3 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                        String format1 = format.format(couponReceive.getStartTime());
                        couponVO.setStartTime(format1);
                        String format2 = format3.format(couponReceive.getEndTime());
                        couponVO.setEndTime(format2);
                    }else if (coupon.getTimeType() == 2 && coupon.getIsDelete() == 0){
                        // 如果优惠券过期了 就不送了
                        Date date = new Date();
                        if (!date.after(coupon.getEndTime())){
                            // 指定时间段
                            couponReceive.setUserId(appUserService.getAppUser().getId());
                            couponReceive.setCouponId(coupon.getId());
                            couponReceive.setReceiveTime(new Date());
                            couponReceive.setReceiveType(2);
                            couponReceive.setStartTime(coupon.getStartTime());
                            couponReceive.setEndTime(coupon.getEndTime());
                            couponReceive.setState(1);
                            couponReceiveService.insert(couponReceive);
                            couponVO.setName(coupon.getCouponName());
                            couponVO.setMoney(coupon.getMoney());
                            couponVO.setReduction(coupon.getReduction());
                            couponVO.setCouponId(coupon.getId());
                            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                            SimpleDateFormat format3 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                            String format1 = format.format(couponReceive.getStartTime());
                            couponVO.setStartTime(format1);
                            String format2 = format3.format(couponReceive.getEndTime());
                            couponVO.setEndTime(format2);
                        }
                    }
                }
            }
            if (orderCourse.getCouponId()!=null){
                CouponReceive couponReceive1 = couponReceive.selectById(orderCourse.getCouponId());
                // 设置为已使用
                couponReceive1.setState(2);
                // 再送一张优惠券
                Coupon coupon = couponService.selectById(couponReceive1.getCouponId());
                // 判断优惠券类型
                if (coupon.getTimeType() == 1 && coupon.getIsDelete() ==0){
                    // 领取后xx天
                    Integer afterDay = coupon.getAfterDay();
                    LocalDate localDate = LocalDate.now().plusDays(afterDay);
                    Date date = DateUtils.toDate(localDate);
                    couponReceive.setUserId(appUserService.getAppUser().getId());
                    couponReceive.setCouponId(coupon.getId());
                    couponReceive.setReceiveTime(new Date());
                    couponReceive.setReceiveType(3);
                    Date startTime = new Date();
                    Date endTime = DateUtils.toDate(localDate);
                    LocalDateTime localStartDateTime = LocalDateTime.ofInstant(startTime.toInstant(), java.time.ZoneId.systemDefault());
                    LocalDateTime localEndDateTime = LocalDateTime.ofInstant(endTime.toInstant(), java.time.ZoneId.systemDefault());
                    // 设置开始时间的时分秒为00:00:00
                    LocalDateTime startOfDay = localStartDateTime.toLocalDate().atStartOfDay();
                    Timestamp startTimestamp = Timestamp.valueOf(startOfDay);
                    startTime = new Date(startTimestamp.getTime());
                    // 设置结束时间的时分秒为23:59:59
                    LocalDate endDate = localEndDateTime.toLocalDate();
                    LocalDateTime endOfDay = endDate.atTime(23, 59, 59);
                    Timestamp endTimestamp = Timestamp.valueOf(endOfDay);
                    endTime = new Date(endTimestamp.getTime());
                    couponReceive.setStartTime(startTime);
                    couponReceive.setEndTime(endTime);
                    couponReceive.setState(1);
                    couponReceiveService.insert(couponReceive);
                    couponVO.setName(coupon.getCouponName());
                    couponVO.setMoney(coupon.getMoney());
                    couponVO.setReduction(coupon.getReduction());
                    couponVO.setCouponId(coupon.getId());
                    SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                    SimpleDateFormat format3 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                    String format1 = format.format(couponReceive.getStartTime());
                    couponVO.setStartTime(format1);
                    String format2 = format3.format(couponReceive.getEndTime());
                    couponVO.setEndTime(format2);
                }else if (coupon.getTimeType() == 2 && coupon.getIsDelete() ==0){
                    Date date = new Date();
                    if (!date.after(coupon.getEndTime())){
                        // 指定时间段
                        couponReceive.setUserId(appUserService.getAppUser().getId());
                        couponReceive.setCouponId(coupon.getId());
                        couponReceive.setReceiveTime(new Date());
                        couponReceive.setReceiveType(3);
                        couponReceive.setStartTime(coupon.getStartTime());
                        couponReceive.setEndTime(coupon.getEndTime());
                        couponReceive.setState(1);
                        couponReceiveService.insert(couponReceive);
                        couponVO.setName(coupon.getCouponName());
                        couponVO.setMoney(coupon.getMoney());
                        couponVO.setReduction(coupon.getReduction());
                        couponVO.setCouponId(coupon.getId());
                        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                        SimpleDateFormat format3 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                        String format1 = format.format(couponReceive.getStartTime());
                        couponVO.setStartTime(format1);
                        String format2 = format3.format(couponReceive.getEndTime());
                        couponVO.setEndTime(format2);
                    }
                }
            }
        }
        return ResultUtil.success(couponVO);
    }
    @ResponseBody
    @PostMapping("/base/sports/buyCourse")
    @ApiOperation(value = "立即购买页面", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "课程id", name = "courseId", dataType = "int", required = true)
    })
    public ResultUtil<BuyDetailVO> buyCourse(Integer courseId) {
        BuyDetailVO buyDetailVO = new BuyDetailVO();
        buyDetailVO.setId(courseId);
        // 查询课程
        Course course = courseService.selectById(courseId);
        StringBuilder typeName = new StringBuilder("");
        Integer positionId = course.getPositionId();
        FitnessPosition fitnessPosition = fitnessPositionService.selectById(positionId);
        FitnessType fitnessType = fitnessTypeService.selectById(fitnessPosition.getTypeId());
        if (fitnessPosition!=null && fitnessType!=null){
            typeName.append(fitnessType.getName()+"|"+fitnessPosition.getName());
            buyDetailVO.setAmount(fitnessPosition.getAmount());
        }
        buyDetailVO.setTypeName(typeName.toString());
        int size = courseService.selectList(new EntityWrapper<Course>()
                .eq("positionId", course.getPositionId())
                .eq("typeId", course.getTypeId())
        .eq("state",1)).size();
        // 查询和这个课程同类型同部位的课程数量
        buyDetailVO.setCount(size);
        // 查询可选套餐列表 查询包含当前购买部位的课程的套餐
        List<PackageListVO> packageListVOS = new ArrayList<PackageListVO>();
        List<Package> packages = packageService.selectList(new EntityWrapper<Package>()
                .eq("state", 1));
        for (Package aPackage : packages) {
            String[] split = aPackage.getPositions().split(",");
            for (String s : split) {
                if (s.equals(positionId.toString())){
                    PackageListVO packageListVO = new PackageListVO();
                    packageListVO.setId(aPackage.getId());
                    packageListVO.setPackageName(aPackage.getName());
                    if (aPackage.getAmount()!=null){
                        packageListVO.setAmount(aPackage.getAmount());
                    }else{
                        packageListVO.setAmount(aPackage.getTotal());
                    }
                    packageListVO.setPrice(aPackage.getPrice());
                    packageListVO.setIds(aPackage.getPositions());
                    // 查询这个套餐下的部位列表
                    packageListVOS.add(packageListVO);
                }
            }
        }
        for (PackageListVO packageListVO : packageListVOS) {
            List<CourseVO> courseVOS = new ArrayList<>();
            for (String s : packageListVO.getIds().split(",")) {
                // 部位
                CourseVO courseVO = new CourseVO();
                StringBuilder temp = new StringBuilder("");
                FitnessPosition fitnessPosition1 = fitnessPositionService.selectById(Integer.valueOf(s));
                FitnessType fitnessType1 = fitnessTypeService.selectById(fitnessPosition1.getTypeId());
                if (fitnessPosition1!=null && fitnessType1!=null){
                    temp.append(fitnessType1.getName()+"|"+fitnessPosition1.getName());
                }
                courseVO.setTypeName(temp.toString());
                List<Course> courses = courseService.selectList(new EntityWrapper<Course>()
                        .eq("state", 1)
                        .eq("positionId", Integer.valueOf(s)));
//                Integer tem = 0;
//                for (Course cours : courses) {
//                    int size1 = courseService.selectList(new EntityWrapper<Course>()
//                            .eq("positionId", cours.getPositionId())
//                            .eq("typeId", cours.getTypeId())).size();
//                    tem+=size1;
//                }
                courseVO.setCount(courses.size());
                courseVOS.add(courseVO);
            }
            packageListVO.setRecommendCourse(courseVOS);
        }
        buyDetailVO.setPackageListVOList(packageListVOS);
        // 查询可以使用的优惠券列表
        AppUser appUser = appUserService.getAppUser();
        List<CouponReceive> couponReceives = couponReceiveService.selectList
                (new EntityWrapper<CouponReceive>()
                .eq("userId", appUser.getId())
                .eq("state", 1)
                .ge("endTime", new Date())
                .le("startTime", new Date()));
        if (couponReceives.size()>0){
            List<CouponVO> couponVOS = new ArrayList<>();
            for (CouponReceive integer : couponReceives) {
                CouponVO couponVO = new CouponVO();
                Coupon coupon = couponService.selectById(integer.getCouponId());
                // 判断优惠券的类型
                if (coupon.getGrantType() == 1){
                    // 如果是打卡赠送 判断起始金额
                    BigDecimal money = coupon.getMoney();
                    // 课程金额
                    BigDecimal amount = fitnessPosition.getAmount();
                    if (amount.compareTo(money)==1){
                        // 可以使用优惠券
                        couponVO.setIsUse(1);
                    }else{
                        // 不满足满减金额
                        couponVO.setIsUse(0);
                    }
                }else{
                    // 如果是购课赠送 判断 这个优惠券是否指定了该部位
                    if (coupon.getBuyCourseId() == fitnessPosition.getId()){
                        // 如果部位满足 再判断金额
                        // 课程金额
                        // 如果是打卡赠送 判断起始金额
                        BigDecimal money = coupon.getMoney();
                        BigDecimal amount = fitnessPosition.getAmount();
                        if (amount.compareTo(money)==1){
                            // 可以使用优惠券
                            couponVO.setIsUse(1);
                        }else{
                            // 不满足满减金额
                            couponVO.setIsUse(0);
                        }
                    }else{
                        couponVO.setIsUse(0);
                    }
                }
                couponVO.setId(integer.getId());
                couponVO.setName(coupon.getCouponName());
                couponVO.setMoney(coupon.getMoney());
                couponVO.setReduction(coupon.getReduction());
                couponVO.setCouponId(integer.getCouponId());
                // 开始时间
                SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                // 结束时间
                SimpleDateFormat format3 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                String format1 = format.format(integer.getStartTime());
                couponVO.setStartTime(format1);
                String format2 = format3.format(integer.getEndTime());
                couponVO.setEndTime(format2);
                couponVOS.add(couponVO);
            }
            buyDetailVO.setCouponVOList(couponVOS);
        }else{
            buyDetailVO.setCouponVOList(new ArrayList<CouponVO>());
        }
        return ResultUtil.success(buyDetailVO);
    }
    @Autowired
    private IUserWatchService userWatchService;
    @ResponseBody
    @PostMapping("/base/sports/riskInfo")
    @ApiOperation(value = "首次训练运动风险告知", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public ResultUtil<StartVO> riskInfo() {
        String riskInfo = sysSetService.selectById(1).getRiskInfo();
        StartVO startVO = new StartVO();
        startVO.setRiskInfo(riskInfo);
        int userId = userWatchService.selectList(new EntityWrapper<UserWatch>()
                .eq("userId", appUserService.getAppUser().getId())).size();
        if (userId==0){
            // 没有看过 需要展示运动风险告知
            startVO.setState(1);
        }else{
            startVO.setState(0);
        }
        return ResultUtil.success(startVO);
    }
    @ResponseBody
    @PostMapping("/base/sports/startTrain")
    @ApiOperation(value = "开始训练", tags = {"运动-开始训练"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "courseId", value = "课程id", required = true)
    })
    public ResultUtil<StartTrainVO> startTrain(Integer courseId) {
        StartTrainVO startTrainVO = new StartTrainVO();
        // 根据课程id和用户id 查询用户上次播放位置
        Integer id = appUserService.getAppUser().getId();
        UserWatch userWatches = userWatchService.selectOne(new EntityWrapper<UserWatch>()
                .eq("courseId", courseId)
                .eq("userId", id));
        List<UserWatch> temp3 = userWatchService.selectList(new EntityWrapper<UserWatch>()
                .eq("userId", id));
        if (temp3.size()>0){
            // 不是首次训练需要弹窗提示
            startTrainVO.setIsFirst(0);
        }else{
            startTrainVO.setIsFirst(1);
        }
        List<CourseVideo> courseVideos = courseVideoService.selectList(new EntityWrapper<CourseVideo>()
                .eq("courseId", courseId)
                .eq("isDelete", 0));
        int totalTime = courseVideos.stream()
                .mapToInt(CourseVideo::getTime)
                .sum();
        startTrainVO.setAllTime(totalTime);
        if (userWatches==null){
            if (courseVideos.size()>0){
                // 证明是首次观看
                startTrainVO.setTime(courseVideos.get(0).getTime());
                startTrainVO.setBeforeTime(0);
                startTrainVO.setBeforeVideoId(courseVideos.get(0).getId());
                startTrainVO.setRealTime(0);
                startTrainVO.setCourseVideo(courseVideos.get(0).getCourseVideo());
                startTrainVO.setVideoName(courseVideos.get(0).getVideoName());
                startTrainVO.setVideos(courseVideos);
                startTrainVO.setPosition("1/"+courseVideos.size());
            }
        }else{
            Integer beforeVideoId = userWatches.getBeforeVideoId();
            Integer beforeTime = userWatches.getBeforeTime();
            Integer realTime = userWatches.getRealTime();
            CourseVideo courseVideo = courseVideoService.selectById(beforeVideoId);
            if (courseVideo!=null){
                startTrainVO.setTime(courseVideo.getTime());
                startTrainVO.setCourseVideo(courseVideo.getCourseVideo());
                startTrainVO.setVideoName(courseVideo.getVideoName());
                startTrainVO.setBeforeTime(beforeTime);
                startTrainVO.setBeforeVideoId(beforeVideoId);
                startTrainVO.setRealTime(realTime);
            }else{
                // 如果为空 那么定位到课程下的第一条视频的0秒处
                startTrainVO.setTime(courseVideos.get(0).getTime());
                startTrainVO.setCourseVideo(courseVideos.get(0).getCourseVideo());
                startTrainVO.setVideoName(courseVideos.get(0).getVideoName());
                startTrainVO.setBeforeTime(0);
                startTrainVO.setBeforeVideoId(courseVideos.get(0).getId());
                startTrainVO.setRealTime(0);
            }
            startTrainVO.setVideos(courseVideos);
            int temp=1;
            for (CourseVideo video : courseVideos) {
                if (video.getId() == beforeVideoId){
                    startTrainVO.setPosition(temp+"/"+courseVideos.size());
                    break;
                }
                temp++;
            }
        }
        return ResultUtil.success(startTrainVO);
    }
    @ResponseBody
    @PostMapping("/base/sports/exit")
    @ApiOperation(value = "中途退出", tags = {"运动-开始训练"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public ResultUtil exit(AddUserWatchDTO dto) {
        Integer id = appUserService.getAppUser().getId();
        Integer courseId = dto.getCourseId();
        UserWatch userWatches = userWatchService.selectOne(new EntityWrapper<UserWatch>()
                .eq("courseId", courseId)
                .eq("userId", id));
        if (userWatches==null){
            // 第一次观看
            UserWatch userWatch = new UserWatch();
            userWatch.setCourseId(courseId);
            userWatch.setBeforeVideoId(dto.getCourseVideoId());
            userWatch.setBeforeTime(dto.getBeforeTime());
            userWatch.setUserId(id);
            userWatch.setRealTime(dto.getRealTime());
            userWatchService.insert(userWatch);
        }else{
            // 修改观看记录
            userWatches.setBeforeVideoId(dto.getCourseVideoId());
            userWatches.setBeforeTime(dto.getBeforeTime());
            userWatches.setRealTime(dto.getRealTime());
            userWatchService.updateById(userWatches);
        }
        return ResultUtil.success();
    }
    @Autowired
    private ICouponClockService couponClockService;
    @ResponseBody
    @PostMapping("/base/sports/clockIn")
    @ApiOperation(value = "打卡", tags = {"运动-开始训练"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "courseId", value = "课程id", required = true)
    })
    public ResultUtil<CompeleteVO> clockIn(Integer courseId) {
        Integer isFree = courseService.selectById(courseId).getIsFree();
        CompeleteVO compeleteVO = new CompeleteVO();
        Integer id = appUserService.getAppUser().getId();
        UserWatch userWatches = userWatchService.selectOne(new EntityWrapper<UserWatch>()
                .eq("courseId", courseId)
                .eq("userId", id));
        userWatches.setClockTime(new Date());
        userWatchService.updateById(userWatches);
        AppUser appUser = appUserService.getAppUser();
        // 查询优惠券列表是否有打卡赠送 且未过期的优惠券
        List<Coupon> coupons = couponService.selectList(new EntityWrapper<Coupon>()
                .eq("grantType", 1)
                .eq("isDelete", 0));
        // 不免费才计算优惠券
        if (isFree == 0){
            List<CouponVO> couponVOS = new ArrayList<>();
            if (coupons.size()>0){
                Integer temp = 999;
                for (Coupon coupon : coupons) {
                    // 没打过卡
                    if (appUser.getClockInTime()== null){
                    }else{
                        Date date = new Date();
                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                        String format1 = format.format(date);
                        String format2 = format.format(appUser.getClockInTime());
                        if (format1.equals(format2)){
                            // 如果时间相同证明他今天已经打过卡了 那么直接break;
                            compeleteVO.setCouponVOS(couponVOS);
                            break;
                        }
                    }
                    if (coupon.getTimeType() == 2){
                        // 需要判断当前优惠券是否过期 如果过期了 就不发了
                        Date startTime = coupon.getStartTime();
                        Date endTime = coupon.getEndTime();
                        Date now = new Date();
                        if (now.after(startTime) && now.before(endTime)){
                            // 判断这个优惠券所需打卡次数
                            Integer needClockIn = coupon.getNeedClockIn();
                            if (appUser.getClockInTime() == null){
                                // 未打卡
                                CouponClock couponClock = new CouponClock();
                                couponClock.setInsertTime(new Date());
                                couponClock.setUserId(appUser.getId());
                                couponClock.setCouponId(coupon.getId());
                                couponClockService.insert(couponClock);
                            }else{
                                Date today = new Date();
                                Date clockInTime1 = appUser.getClockInTime();
                                SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
                                String todayStr = sdf.format(today);
                                String info = sdf.format(clockInTime1);
                                if (!todayStr.equals(info)) {
                                    // 时间不相同增加打卡次数
                                    CouponClock couponClock1 = new CouponClock();
                                    couponClock1.setInsertTime(new Date());
                                    couponClock1.setUserId(appUser.getId());
                                    couponClock1.setCouponId(coupon.getId());
                                    couponClockService.insert(couponClock1);
                                    // 增加打卡记录
                                }
                            }
                            // 查询这个用户针对这个优惠券打卡几次了
                            int size = couponClockService.selectList(new EntityWrapper<CouponClock>()
                                    .eq("userId", appUser.getId())
                                    .eq("couponId", coupon.getId())).size();
                            if (size>=needClockIn && (size%needClockIn==0)){
                                // 将当前优惠券发给用户
                                CouponReceive couponReceive = new CouponReceive();
                                couponReceive.setUserId(id);
                                couponReceive.setCouponId(coupon.getId());
                                couponReceive.setReceiveTime(new Date());
                                couponReceive.setReceiveType(1);
                                couponReceive.setStartTime(coupon.getStartTime());
                                couponReceive.setEndTime(coupon.getEndTime());
                                couponReceive.setState(1);
                                couponReceiveService.insert(couponReceive);
                                compeleteVO.setCouponVOS(couponVOS);
                                CouponVO couponVO = new CouponVO();
                                couponVO.setName(coupon.getCouponName());
                                couponVO.setMoney(coupon.getMoney());
                                couponVO.setReduction(coupon.getReduction());
                                couponVO.setCouponId(coupon.getId());
                                SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                                SimpleDateFormat format5 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                                String format1 = format.format(startTime);
                                String format2 = format5.format(endTime);
                                couponVO.setStartTime(format1);
                                couponVO.setEndTime(format2);
                                // 满足时间
                                couponVOS.add(couponVO);
                                int size1 = couponClockService.selectList(new EntityWrapper<CouponClock>()
                                        .eq("userId", appUser.getId())
                                        .eq("couponId", coupon.getId())).size();
                                if (needClockIn-(size1%needClockIn)<temp){
                                    compeleteVO.setTime(needClockIn-(size1%needClockIn));
                                }else{
                                    compeleteVO.setTime(temp);
                                }
                            }else{
                                if (needClockIn-(size%needClockIn)<temp){
                                    compeleteVO.setTime(needClockIn-(size%needClockIn));
                                }else{
                                    compeleteVO.setTime(temp);
                                }
                            }
                        }
                    }else{
                        if (appUser.getClockInTime() == null){
                            CouponClock couponClock = new CouponClock();
                            couponClock.setInsertTime(new Date());
                            couponClock.setUserId(appUser.getId());
                            couponClock.setCouponId(coupon.getId());
                            couponClockService.insert(couponClock);
                        }else{
                            Date today = new Date();
                            Date clockInTime1 = appUser.getClockInTime();
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
                            String todayStr = sdf.format(today);
                            String info = sdf.format(clockInTime1);
                            if (!todayStr.equals(info)) {
                                CouponClock couponClock1 = new CouponClock();
                                couponClock1.setInsertTime(new Date());
                                couponClock1.setUserId(appUser.getId());
                                couponClock1.setCouponId(coupon.getId());
                                couponClockService.insert(couponClock1);
                                // 增加打卡记录
                            }
                        }
                        // 判断这个优惠券所需打卡次数
                        Integer needClockIn = coupon.getNeedClockIn();
                        // 查询这个用户针对这个优惠券打卡几次了
                        int size = couponClockService.selectList(new EntityWrapper<CouponClock>()
                                .eq("userId", appUser.getId())
                                .eq("couponId", coupon.getId())).size();
                        if (size>=needClockIn && (size % needClockIn==0)){
                            // 将当前优惠券发给用户
                            CouponReceive couponReceive1 = new CouponReceive();
                            couponReceive1.setUserId(id);
                            couponReceive1.setCouponId(coupon.getId());
                            couponReceive1.setReceiveTime(new Date());
                            couponReceive1.setReceiveType(1);
                            Integer afterDay = coupon.getAfterDay();
                            LocalDate localDate = LocalDate.now().plusDays(afterDay);
                            Date startTime = new Date();
                            Date endTime = DateUtils.toDate(localDate);
                            LocalDateTime localStartDateTime = LocalDateTime.ofInstant(startTime.toInstant(), java.time.ZoneId.systemDefault());
                            LocalDateTime localEndDateTime = LocalDateTime.ofInstant(endTime.toInstant(), java.time.ZoneId.systemDefault());
                            // 设置开始时间的时分秒为00:00:00
                            LocalDateTime startOfDay = localStartDateTime.toLocalDate().atStartOfDay();
                            Timestamp startTimestamp = Timestamp.valueOf(startOfDay);
                            startTime = new Date(startTimestamp.getTime());
                            // 设置结束时间的时分秒为23:59:59
                            LocalDate endDate = localEndDateTime.toLocalDate();
                            LocalDateTime endOfDay = endDate.atTime(23, 59, 59);
                            Timestamp endTimestamp = Timestamp.valueOf(endOfDay);
                            endTime = new Date(endTimestamp.getTime());
                            couponReceive1.setStartTime(startTime);
                            couponReceive1.setEndTime(endTime);
                            couponReceive1.setState(1);
                            couponReceiveService.insert(couponReceive1);
                            LocalDate currentDate = LocalDate.now();
                            LocalDate newDate = currentDate.plusDays(coupon.getAfterDay());
                            Date date = DateUtils.toDate(newDate);
                            CouponVO couponVO = new CouponVO();
                            couponVO.setName(coupon.getCouponName());
                            couponVO.setMoney(coupon.getMoney());
                            couponVO.setReduction(coupon.getReduction());
                            couponVO.setCouponId(coupon.getId());
                            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                            SimpleDateFormat format5 = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                            date.setHours(23);
                            date.setMinutes(59);
                            date.setSeconds(59);
                            String format1 = format.format(new Date());
                            String format2 = format5.format(date);
                            couponVO.setStartTime(format1);
                            couponVO.setEndTime(format2);
                            couponVOS.add(couponVO);
                            compeleteVO.setCouponVOS(couponVOS);
                            int size1 = couponClockService.selectList(new EntityWrapper<CouponClock>()
                                    .eq("userId", appUser.getId())
                                    .eq("couponId", coupon.getId())).size();
                            if (needClockIn-(size1%needClockIn)<temp){
                                compeleteVO.setTime(needClockIn-(size1%needClockIn));
                            }else{
                                compeleteVO.setTime(temp);
                            }
                        }else{
                            if (needClockIn-(size%needClockIn)<temp){
                                compeleteVO.setTime(needClockIn-(size%needClockIn));
                            }else{
                                compeleteVO.setTime(temp);
                            }
                        }
                    }
                }
                // 没打过卡
                if (appUser.getClockInTime()== null){
                    appUser.setClockInTime(new Date());
                    appUser.setClockIn(appUser.getClockIn()+1);
                    appUserService.updateById(appUser);
                }else{
                    Date date = new Date();
                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                    String format1 = format.format(date);
                    String format2 = format.format(appUser.getClockInTime());
                    if (!format1.equals(format2)){
                        // 时间不相同增加打卡次数
                        appUser.setClockInTime(new Date());
                        appUser.setClockIn(appUser.getClockIn()+1);
                        appUserService.updateById(appUser);
                    }
                }
            }else{
                // 没打过卡
                if (appUser.getClockInTime()== null){
                    appUser.setClockInTime(new Date());
                    appUser.setClockIn(appUser.getClockIn()+1);
                    appUserService.updateById(appUser);
                }else{
                    Date date = new Date();
                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                    String format1 = format.format(date);
                    String format2 = format.format(appUser.getClockInTime());
                    if (!format1.equals(format2)){
                        // 时间不相同增加打卡次数
                        appUser.setClockInTime(new Date());
                        appUser.setClockIn(appUser.getClockIn()+1);
                        appUserService.updateById(appUser);
                    }
                }
                List<CouponVO> couponVOS1 = new ArrayList<>();
                compeleteVO.setCouponVOS(couponVOS1);
                compeleteVO.setTime(null);
            }
        }else{
            List<CouponVO> couponVOS1 = new ArrayList<>();
            compeleteVO.setCouponVOS(couponVOS1);
            compeleteVO.setTime(null);
        }
        return ResultUtil.success(compeleteVO);
    }
    @ResponseBody
    @PostMapping("/base/sports/completeInfo")
    @ApiOperation(value = "训练完成", tags = {"运动-开始训练"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "courseId", value = "课程id", required = true)
    })
    public ResultUtil<CompeleteVO> completeInfo(Integer courseId) {
        Date compeleteTime = appUserService.getAppUser().getCompeleteTime();
        if (compeleteTime!=null){
            Date date = new Date();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            if (format.format(date).equals(format.format(compeleteTime))) {
                // 同一天那么不计算坚持运动天数
            }else{
                AppUser appUser = appUserService.getAppUser();
                appUser.setCompeleteTime(new Date());
                appUser.setTime(appUser.getTime()+1);
                appUserService.updateById(appUser);
            }
        }else{
            AppUser appUser = appUserService.getAppUser();
            appUser.setTime(appUser.getTime()+1);
            appUser.setCompeleteTime(new Date());
            appUserService.updateById(appUser);
        }
        Integer id = appUserService.getAppUser().getId();
        UserWatch userWatches = userWatchService.selectOne(new EntityWrapper<UserWatch>()
                .eq("courseId", courseId)
                .eq("userId", id));
        if (userWatches!=null){
            // 打卡后 将观看记录初始化
            userWatches.setBeforeTime(0);
            userWatches.setRealTime(0);
            userWatchService.updateById(userWatches);
        }else{
            UserWatch userWatch = new UserWatch();
            // 设置为课程下第一个视频
            List<CourseVideo> courseVideos = courseVideoService.selectList(new EntityWrapper<CourseVideo>()
                    .eq("courseId", courseId)
                    .eq("isDelete", 0));
            userWatch.setCourseId(courseId);
            userWatch.setBeforeVideoId(courseVideos.get(0).getId());
            userWatch.setBeforeTime(0);
            userWatch.setUserId(id);
            userWatch.setRealTime(0);
            userWatchService.insert(userWatch);
        }
        AppUser appUser = appUserService.getAppUser();
        // 返回页面内容
        Course course = courseService.selectById(courseId);
        CompeleteVO compeleteVO = new CompeleteVO();
        compeleteVO.setCoverImg(course.getCoverImg());
        compeleteVO.setCourseName(course.getCourseName());
        compeleteVO.setClockIn(appUser.getTime());
        compeleteVO.setIsFree(course.getIsFree());
        if (compeleteVO.getCouponVOS() == null){
            List<CouponVO> couponVOS1 = new ArrayList<>();
            compeleteVO.setCouponVOS(couponVOS1);
        }
        return ResultUtil.success(compeleteVO);
    }
    @ResponseBody
    @PostMapping("/base/sports/collectCourse")
    @ApiOperation(value = "点击收藏课程", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "课程id", name = "courseId", dataType = "int", required = true)
    })
    public ResultUtil collectCourse(Integer courseId) {
        Integer id = appUserService.getAppUser().getId();
        // 先判断用户是否收藏了该课程
        UserCollect userCollect1 = collectService.selectOne(new EntityWrapper<UserCollect>()
                .eq("courseId", courseId)
                .eq("userId", id));
        if (userCollect1!=null){
            // 用户已经收藏了该课程
            collectService.deleteById(userCollect1);
            return ResultUtil.success("取消收藏");
        }else{
            UserCollect userCollect = new UserCollect();
            userCollect.setUserId(id);
            userCollect.setCourseId(courseId);
            collectService.insert(userCollect);
        }
        return ResultUtil.success("收藏成功");
    }
    @ResponseBody
    @PostMapping("/base/sports/courseDetail")
    @ApiOperation(value = "课程详情", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "课程id", name = "courseId", dataType = "int", required = true)
    })
    public ResultUtil<CourseDetailVO> courseDetail(Integer courseId) {
        Integer userId = appUserService.getAppUser().getId();
        CourseDetailVO res = new CourseDetailVO();
        List<Integer> list = new ArrayList<>();
        CourseQuery courseQuery = new CourseQuery();
        list.add(courseId);
        courseQuery.setCourseIds(list);
        List<CourseList> courseLists = courseService.courseSearch1(courseQuery);
        CourseList courseList = courseLists.get(0);
        BeanUtils.copyProperties(courseList,res);
        // 查询用户是否已收藏该课程
        UserCollect userCollect = collectService.selectOne(new EntityWrapper<UserCollect>()
                .eq("userId", userId)
                .eq("courseId", courseId));
        if (userCollect==null){
            res.setIsCollect(0);
        }else {
            res.setIsCollect(1);
        }
        res.setId(courseId);
        res.setIsBuy(0);
        // 查询用户是否购买了该课程
        List<OrderCourse> courses = orderCourseService.selectList(new EntityWrapper<OrderCourse>()
                .eq("userId", userId)
        .eq("state",2));
        for (OrderCourse cours : courses) {
            if (cours.getCourseId() == courseId){
                res.setIsBuy(1);
                break;
            }
        }
        // 查询用户购买的套餐 是否包含该课程
        List<Order> packages = orderService.selectList(new EntityWrapper<Order>()
                .eq("userId", userId)
                .eq("state",2));
        if (res.getIsBuy()!=1){
            for (Order aPackage : packages) {
                Integer packageId = aPackage.getPackageId();
                String positions = packageService.selectById(packageId).getPositions();
                if (StringUtils.hasLength(positions)){
                    String[] split = positions.split(",");
                    // 通过部位ids 获取到课程ids
                    List<Integer> positionId = courseService.selectList(new EntityWrapper<Course>()
                            .in("positionId", split)).stream().map(Course::getId)
                            .collect(Collectors.toList());
                    if (positionId.contains(courseId)){
                        res.setIsBuy(1);
                        break;
                    }
                }
            }
        }
        if (res.getIsBuy() != 1){
            // 先查询出和这个课程同类型同部位
            Course course1 = courseService.selectById(courseId);
            // 相同的课程id
            List<Integer> positionId = courseService.selectList(new EntityWrapper<Course>()
                    .eq("positionId", course1.getPositionId())).stream().map(Course::getId).collect(Collectors.toList());
            // 查询下用户有没有购买其他相同部位和类型的课程 如果有 那么就算已购买
            // 查询用户已购买的课程
            List<OrderCourse> orderCourses = orderCourseService.selectList(new EntityWrapper<OrderCourse>()
                    .eq("userId", appUserService.getAppUser().getId())
                    .eq("state", 2)
                    .in("courseId",positionId));
            if (orderCourses.size()!=0){
                res.setIsBuy(1);
            }
        }
        // 推荐课程3个 相同类型 相同难度 按sort排序
        Course course = courseService.selectById(courseId);
        Integer difficulty = course.getDifficulty();
        Integer typeId = course.getTypeId();
        List<String> strings = new ArrayList<>();
        strings.add("sort");
        List<Course> courses1 = courseService.selectList(new EntityWrapper<Course>()
                .eq("difficulty", difficulty)
                .eq("typeId", typeId)
                .ne("id",courseId)
                .eq("state",1)
                .orderDesc(strings)
                .last("limit 3"));
        for (Course course1 : courses1) {
            course1.setTime(course1.getAllTime());
        }
        res.setRecommendCourse(courses1);
        List<CourseVideo> courseVideos = courseVideoService.selectList(new EntityWrapper<CourseVideo>()
                .eq("courseId", courseId)
                .eq("isDelete", 0));
        res.setVideos(courseVideos);
        return ResultUtil.success(res);
    }
    @ResponseBody
    @PostMapping("/base/sports/myCourse")
    @ApiOperation(value = "我的课程", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<List<CourseList>> myCourse(CourseQuery req) {
        AppUser appUser = appUserService.getAppUser();
        req.setUserId(appUser.getId());
        if (StringUtils.hasLength(req.getTime())){
            for (String s : req.getTime().split(",")) {
                if (Integer.valueOf(s) == 1){
                    req.setStartTime(0);
                    req.setEndTime(600);
                }else if (Integer.valueOf(s) == 2){
                    req.setStartTime1(600);
                    req.setEndTime1(1200);
                }else if (Integer.valueOf(s) == 3){
                    req.setStartTime1(1200);
                    req.setEndTime1(99999999);
                }
            }
        }
        if (StringUtils.hasLength(req.getTypeIds1())){
            List<Integer> list = new ArrayList<>();
            for (String s : req.getTypeIds1().split(",")) {
                list.add(Integer.valueOf(s));
            }
            req.setTypeIds(list);
        }
        if (StringUtils.hasLength(req.getPositionName1())){
            List<String> list = new ArrayList<>();
            for (String s : req.getPositionName1().split(",")) {
                list.add(s);
            }
            req.setPositionName(list);
        }
        if (StringUtils.hasLength(req.getDifficulty1())){
            List<Integer> list = new ArrayList<>();
            for (String s : req.getDifficulty1().split(",")) {
                list.add(Integer.valueOf(s));
            }
            req.setDifficulty(list);
        }
        // 查询用户已收藏的课程ids
//        List<Integer> courseIds = collectService.selectList(new EntityWrapper<UserCollect>()
//                .eq("userId", appUser.getId())).stream().map(UserCollect::getCourseId)
//                .collect(Collectors.toList());
//        if (courseIds.size()==0){
//            courseIds.add(-1);
//        }
//        req.setCourseIds(courseIds);
        // 查询出收藏的课程 并且将免费的展示在最前面
        List<CourseList> res = new ArrayList<CourseList>();
//        List<CourseList> res = courseService.courseSearch1(req);
        // 查询已购买的课程
        // 先查询用户是否购买套餐 如果购买了套餐了 查询出套餐ids
        List<Integer> collect = orderService.selectList(new EntityWrapper<Order>()
                .eq("userId", appUser.getId())
                .eq("state", 2)).stream()
                .map(Order::getPackageId).collect(Collectors.toList());
        List<CourseList> courses = new ArrayList<>();
        // 课程ids
        List<Integer> list = new ArrayList<>();
        // 根据套餐ids 查询课程ids
        for (Integer integer : collect) {
            String positions = packageService.selectById(integer).getPositions();
            if (StringUtils.hasLength(positions)){
                String[] split = positions.split(",");
                // 通过部位ids 获取到课程ids
                List<Integer> positionId = courseService.selectList(new EntityWrapper<Course>()
                        .in("positionId", split)).stream().map(Course::getId)
                        .collect(Collectors.toList());
                list.addAll(positionId);
            }
        }
        // 查询购买了的课程ids
        List<Integer> collect2 = orderCourseService.selectList(new EntityWrapper<OrderCourse>()
                .eq("userId", appUser.getId())
                .eq("state", 2))
                .stream().map(OrderCourse::getCourseId).collect(Collectors.toList());
        list.addAll(collect2);
        List<Integer> collect3 = list.stream().distinct().collect(Collectors.toList());
        // 去重后的课程ids 遍历集合 查询相同类型和部位的课程
        if (collect3.size() == 0){
            collect3.add(-1);
        }else{
            List<Integer> list1 = new ArrayList<>();
            for (Integer integer : collect3) {
                Course course = courseService.selectById(integer);
                if (course!=null){
                    Integer positionId = course.getPositionId();
                    // 和当前课程同类型同部位的课程
                    List<Integer> collect1 = courseService.selectList(new EntityWrapper<Course>()
                            .eq("state", 1)
                            .eq("positionId", positionId)).stream().map(Course::getId).collect(Collectors.toList());
                    if (collect1.size()>0){
                        list1.addAll(collect1);
                    }
                }
            }
            List<Integer> collect1 = list1.stream().distinct().collect(Collectors.toList());
            collect3.addAll(collect1);
        }
        List<Integer> collect4 = collect3.stream().distinct().collect(Collectors.toList());
        req.setCourseIds(collect4);
        courses = courseService.courseSearch1(req);
        res.addAll(courses);
        for (CourseList re : res) {
            Integer id = re.getId();
            UserCollect userCollect = userCollectService.selectOne(new EntityWrapper<UserCollect>()
                    .eq("userId", appUser.getId())
                    .eq("courseId", id));
            if (userCollect!=null){
                re.setIsCollect(1);
            }else{
                re.setIsCollect(0);
            }
        }
        List<CourseList> sortedList = res.stream()
                .sorted(Comparator.comparingInt(CourseList::getIsCollect).reversed())
                .collect(Collectors.toList());
        List<CourseList> collect1 = sortedList.stream().distinct().collect(Collectors.toList());
        List<CourseList> testing = testing(collect1.size(), req.getPageNum(), req.getPageSize(), collect1);
        // 对结果进行分页处理
        return ResultUtil.success(testing);
    }
    public static List<CourseList> testing(long total, long current, long size, List<CourseList> str){
        List<CourseList> result = new ArrayList<>();
        //获取初始化分页结构
        com.stylefeng.guns.modular.system.util.Page<CourseList> page = new Page().getPage(total, size, current - 1);
        //获取集合下标初始值
        long startIndex = page.getStartIndex();
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
    @Autowired
    private IUserCollectService userCollectService;
    @ResponseBody
    @PostMapping("/base/sports/courseSearch")
    @ApiOperation(value = "课程搜索", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<List<CourseList>> courseSearch(CourseQuery req) {
        req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
        if (StringUtils.hasLength(req.getTime())){
            for (String s : req.getTime().split(",")) {
                if (Integer.valueOf(s) == 1){
                    req.setStartTime(0);
                    req.setEndTime(600);
                }else if (Integer.valueOf(s) == 2){
                    req.setStartTime1(600);
                    req.setEndTime1(1200);
                }else if (Integer.valueOf(s) == 3){
                    req.setStartTime1(1200);
                    req.setEndTime1(99999999);
                }
            }
        }
        if (StringUtils.hasLength(req.getTypeIds1())){
            List<Integer> list = new ArrayList<>();
            for (String s : req.getTypeIds1().split(",")) {
                list.add(Integer.valueOf(s));
            }
            req.setTypeIds(list);
        }
        if (StringUtils.hasLength(req.getPositionName1())){
            List<String> list = new ArrayList<>();
            for (String s : req.getPositionName1().split(",")) {
                list.add(s);
            }
            req.setPositionName(list);
        }
        if (StringUtils.hasLength(req.getDifficulty1())){
            List<Integer> list = new ArrayList<>();
            for (String s : req.getDifficulty1().split(",")) {
                list.add(Integer.valueOf(s));
            }
            req.setDifficulty(list);
        }
//        if (req.getTime()!=null){
//            switch (req.getTime()){
//                case 1:
//                    req.setStartTime(0);
//                    req.setEndTime(600);
//                    break;
//                case 2:
//                    req.setStartTime(600);
//                    req.setEndTime(1200);
//                    break;
//                case 3:
//                    req.setStartTime(1200);
//                    req.setEndTime(99999999);
//                    break;
//            }
//        }
        List<CourseList> res = courseService.courseSearch(req);
        return ResultUtil.success(res);
    }
    @ResponseBody
    @PostMapping("/base/sports/getBanner")
    @ApiOperation(value = "banner", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<List<Banner>> getBanner() {
        List<String> strings = new ArrayList<>();
        strings.add("sort");
        List<Banner> state = bannerService.selectList(new EntityWrapper<Banner>()
                .eq("state", 1)
                .orderDesc(strings));
        return ResultUtil.success(state);
    }
    @ResponseBody
    @PostMapping("/base/sports/getList")
    @ApiOperation(value = "课程筛选条件", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<SearchList> getList() {
        AppUser appUser = appUserService.getAppUser();
        // 查询用户有哪些课程购买了的
        List<OrderCourse> orderCourses = orderCourseService.selectList(new EntityWrapper<OrderCourse>()
                .eq("userId", appUser.getId())
                .eq("state", 2));
        List<Order> order = orderService.selectList(new EntityWrapper<Order>()
                .eq("userId", appUser.getId())
                .eq("state", 2));
        // 课程的ids
        List<Integer> course = new ArrayList<>();
        // 套餐的ids
        List<Integer> packages = new ArrayList<>();
        if (orderCourses.size()>0){
            // 获取到购买的所有课程id
            course = orderCourses.stream().map(OrderCourse::getCourseId).distinct().collect(Collectors.toList());
        }
        if (order.size()>0){
            for (Order order1 : order) {
                for (String s : packageService.selectById(order1.getPackageId())
                        .getPositions().split(",")) {
                    List<Integer> positionId = courseService.selectList(new EntityWrapper<Course>()
                            .eq("positionId", s)).stream().map(Course::getId)
                            .collect(Collectors.toList());
                    packages.addAll(positionId);
                }
            }
             packages = packages.stream().distinct().collect(Collectors.toList());
        }
        course.addAll(packages);
        // 所有用户的课程ids
        List<Integer> collect = course.stream().distinct().collect(Collectors.toList());
        // 查询包含的类型和部位
        List<Integer> collect1 = courseService.selectList(new EntityWrapper<Course>()
                .in("id", collect).eq("state", 1)).stream().map(Course::getPositionId)
                .collect(Collectors.toList());
        List<Integer> collect2 = courseService.selectList(new EntityWrapper<Course>()
                .in("id", collect).eq("state", 1)).stream().map(Course::getTypeId)
                .collect(Collectors.toList());
        List<String> strings = new ArrayList<>();
        List<FitnessPosition> fitnessPositions = new ArrayList<>();
        List<DifficultyVO> d = new ArrayList<>();
        List<DifficultyVO> t = new ArrayList<>();
        DifficultyVO difficultyVO5 = new DifficultyVO();
        difficultyVO5.setIsUse(0);
        difficultyVO5.setId(1);
        difficultyVO5.setName("小于十分钟");
        DifficultyVO difficultyVO6 = new DifficultyVO();
        difficultyVO6.setIsUse(0);
        difficultyVO6.setId(2);
        difficultyVO6.setName("10-20分钟");
        DifficultyVO difficultyVO7 = new DifficultyVO();
        difficultyVO7.setIsUse(0);
        difficultyVO7.setId(3);
        difficultyVO7.setName("大于20分钟");
        t.add(difficultyVO5);
        t.add(difficultyVO6);
        t.add(difficultyVO7);
        List<FitnessPosition> positions = fitnessPositionService.selectList(new EntityWrapper<FitnessPosition>()
                .eq("isDelete", 0));
        for (FitnessPosition position : positions) {
            position.setIsUse(0);
            if (strings.contains(position.getName())){
                continue;
            }else{
                strings.add(position.getName());
                fitnessPositions.add(position);
            }
            for (Integer integer : collect1) {
                if (position.getId().equals(integer)){
                    position.setIsUse(1);
                    break;
                }
            }
        }
        List<FitnessType> types = fitnessTypeService.selectList(new EntityWrapper<FitnessType>()
                .eq("isDelete", 0));
        for (FitnessType type : types) {
            type.setIsUse(0);
            for (Integer integer : collect2) {
                if (type.getId().equals(integer)){
                    type.setIsUse(1);
                    break;
                }
            }
        }
        SearchList searchList = new SearchList();
        // 查询这些课程有哪些难度
        // 所有属于用户的课程ids
        List<Course> courses = courseService.selectList(new EntityWrapper<Course>()
                .eq("state", 1)
                .in("id", collect));
        // 获取所有课程的时间
        List<String> collect4 = courses.stream().map(Course::getTime).distinct().collect(Collectors.toList());
        for (String s : collect4) {
            Integer integer = Integer.valueOf(s);
            if (integer>1200){
                DifficultyVO difficultyVO = t.get(2);
                difficultyVO.setIsUse(1);
                t.set(2,difficultyVO);
                continue;
            }
            if (integer<1200 && integer>600){
                DifficultyVO difficultyVO = t.get(1);
                difficultyVO.setIsUse(1);
                t.set(1,difficultyVO);
                continue;
            }
            if (integer<600){
                DifficultyVO difficultyVO = t.get(0);
                difficultyVO.setIsUse(1);
                t.set(0,difficultyVO);
                continue;
            }
        }
        // 获取所有的难度
        List<Integer> collect3 = courses.stream().map(Course::getDifficulty).distinct().collect(Collectors.toList());
        if (collect3.contains(1)){
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(1);
            difficultyVO.setId(1);
            difficultyVO.setName("H1");
            d.add(difficultyVO);
        }else{
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(0);
            difficultyVO.setId(1);
            difficultyVO.setName("H1");
            d.add(difficultyVO);
        }
        if(collect3.contains(2)){
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(1);
            difficultyVO.setId(2);
            difficultyVO.setName("H2");
            d.add(difficultyVO);
        }else{
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(0);
            difficultyVO.setId(2);
            difficultyVO.setName("H2");
            d.add(difficultyVO);
        }
        if(collect3.contains(3)){
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(1);
            difficultyVO.setId(3);
            difficultyVO.setName("H3");
            d.add(difficultyVO);
        }else{
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(0);
            difficultyVO.setName("H3");
            difficultyVO.setId(3);
            d.add(difficultyVO);
        }
        if(collect3.contains(4)){
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(1);
            difficultyVO.setId(4);
            difficultyVO.setName("H4");
            d.add(difficultyVO);
        }else{
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(0);
            difficultyVO.setName("H4");
            difficultyVO.setId(4);
            d.add(difficultyVO);
        }
        if(collect3.contains(5)){
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(1);
            difficultyVO.setId(5);
            difficultyVO.setName("H5");
            d.add(difficultyVO);
        }else{
            DifficultyVO difficultyVO = new DifficultyVO();
            difficultyVO.setIsUse(0);
            difficultyVO.setId(5);
            difficultyVO.setName("H5");
            d.add(difficultyVO);
        }
        searchList.setDifficulty(d);
        searchList.setTime(t);
        searchList.setFitnessPosition(fitnessPositions);
        searchList.setFitnessType(types);
        return ResultUtil.success(searchList);
    }
    public static void main(String[] args) throws Exception {
        BigDecimal divisor = new BigDecimal("100");
        BigDecimal res = new BigDecimal("0.8");
        BigDecimal bigDecimal = res.divide(divisor);
        System.err.println(bigDecimal);
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserController.java
New file
@@ -0,0 +1,1731 @@
package com.stylefeng.guns.modular.api;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.stylefeng.guns.modular.system.dto.*;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.Page;
import com.stylefeng.guns.modular.system.vo.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.Swagger;
import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.security.PrivilegedAction;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author 无关风月
 * @Date 2024/2/6 18:25
 */
@RestController
@RequestMapping("")
public class UserController {
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private IProtocolService protocolService;
    @Autowired
    private IPageService pageService;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private IUserCollectService collectService;
    @Autowired
    private ICourseService courseService;
    @Autowired
    private IFeedbackService feedbackService;
    @Autowired
    private IFindService findService;
    @Autowired
    private IFindCommentService findCommentService;
    @Autowired
    private IRechargeService rechargeService;
    @Autowired
    private IOrderCourseService orderCourseService;
    @Autowired
    private IWithdrawalService withdrawalService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private IInviteService inviteService;
    @Autowired
    private ICouponService couponService;
    @Autowired
    private ICouponReceiveService couponReceiveService;
    @Autowired
    private IUserRecordService recordService;
    @Autowired
    private IUseGuideService useGuideService;
    @Autowired
    private IRedPackageService redPackageService;
    private String COLLECTION_KEY = "c33eacc01b9832ee0d3544fda707f2e9";
    @Autowired
    private ISysSetService sysSetService;
    @ResponseBody
    @PostMapping("/base/appUser/peopleList")
    @ApiOperation(value = "好友推广", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public ResultUtil<PeopleListVO> peopleList() {
        PeopleListVO peopleListVO = new PeopleListVO();
        peopleListVO.setUserName(appUserService.getAppUser().getName());
        AppUser appUser = appUserService.getAppUser();
        Integer inviteUserId = appUser.getInviteUserId();
        if (inviteUserId!=null){
            AppUser appUser1 = appUser.selectById(inviteUserId);
            if (StringUtils.hasLength(appUser1.getName())){
                peopleListVO.setInvite(appUser1.getName());
            }else{
                peopleListVO.setInvite(appUser1.getPhone());
            }
        }
        StringBuilder stringBuilder = new StringBuilder("");
        for (AppUser userId : appUserService.selectList(new EntityWrapper<AppUser>()
                .eq("inviteUserId", appUser.getId()))) {
            stringBuilder.append(userId.getName()+",");
        }
        String s = stringBuilder.toString();
        if (StringUtils.hasLength(s)){
            String substring = s.substring(0, s.length() - 1);
            peopleListVO.setPeople(substring);
        }
        peopleListVO.setId(appUser.getId());
        peopleListVO.setCode(appUser.getCode());
        SysSet sysSet = sysSetService.selectById(1);
        String introduce = sysSet.getIntroduce();
        peopleListVO.setContent(introduce);
        peopleListVO.setUrl("https://jkcyl.cn/share");
        return ResultUtil.success(peopleListVO);
    }
    @ResponseBody
    @PostMapping("/base/appUser/getBindingUserName")
    @ApiOperation(value = "获取绑定邀请码的用户名称", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "邀请码", name = "code", dataType = "string", required = true)
    })
    public ResultUtil getBindingUserName(String code) {
        AppUser appUser = appUserService.getAppUser();
        if (code.equals(appUser.getCode())){
            return ResultUtil.errorInvite("不能绑定自己",null);
        }
        AppUser code1 = appUserService.selectOne(new EntityWrapper<AppUser>()
                .eq("code", code));
        if (code1 == null){
            return ResultUtil.errorInvite("邀请码无效",null);
        }
        return ResultUtil.success(code1.getName());
    }
    @ResponseBody
    @PostMapping("/base/appUser/binding")
    @ApiOperation(value = "绑定邀请码--", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "邀请码", name = "code", dataType = "string", required = true)
    })
    public ResultUtil updateBankCard(String code) {
        AppUser appUser = appUserService.getAppUser();
        AppUser code1 = appUserService.selectOne(new EntityWrapper<AppUser>()
                .eq("code", code));
        if (code1 == null){
            return ResultUtil.errorInvite("邀请码无效",null);
        }
        if (code.equals(appUser.getCode())){
            return ResultUtil.error("不能绑定自己");
        }
        appUser.setInviteUserId(code1.getId());
        appUserService.updateById(appUser);
        return ResultUtil.success(code1.getName());
    }
    @ResponseBody
    @PostMapping("/base/appUser/Withdrawal")
    @ApiOperation(value = "提现", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "提现金额", name = "money", required = true)
    })
    public ResultUtil Withdrawal(BigDecimal money) {
        AppUser appUser = appUserService.getAppUser();
        if (!StringUtils.hasLength(appUser.getBankCard())){
            return ResultUtil.error("提现失败 请先绑定银行卡");
        }
        if (appUser.getBalance().compareTo(money)<0){
            return ResultUtil.error("可提现金额不足");
        }
        Withdrawal withdrawal = new Withdrawal();
        withdrawal.setUserId(appUser.getId());
        withdrawal.setInsertTime(new Date());
        withdrawal.setAmount(money);
        withdrawal.setApplyAmount(appUser.getBalance());
        withdrawal.setState(1);
        withdrawal.setPayment(1);
        withdrawalService.insert(withdrawal);
        BigDecimal balance = appUser.getBalance();
        BigDecimal subtract = balance.subtract(money);
        appUser.setBalance(subtract);
        appUserService.updateById(appUser);
        return ResultUtil.success();
    }
    @ResponseBody
    @PostMapping("/base/appUser/updateBankCard")
    @ApiOperation(value = "绑定银行卡", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "银行卡开户名", name = "accountName", dataType = "string" ),
            @ApiImplicitParam(value = "银行卡卡号", name = "bankCard", dataType = "string" ),
            @ApiImplicitParam(value = "银行卡开户行", name = "bankName", dataType = "string"),
            @ApiImplicitParam(value = "银行卡绑定手机号", name = "bankPhone", dataType = "string"),
            @ApiImplicitParam(value = "银行卡正面照", name = "bankCardImg", dataType = "string")
    })
    public ResultUtil updateBankCard(String accountName, String bankCard,String bankName,String bankPhone,String bankCardImg) {
        AppUser appUser = appUserService.getAppUser();
        appUser.setBankCard(bankCard);
        appUser.setAccountName(accountName);
        appUser.setBankName(bankName);
        appUser.setBankPhone(bankPhone);
        appUser.setBankCardImg(bankCardImg);
        if (!StringUtils.hasLength(accountName)){
            return ResultUtil.success(appUser);
        }
        appUserService.updateById(appUser);
        return ResultUtil.success();
    }
    @ResponseBody
    @PostMapping("/base/appUser/getPhone")
    @ApiOperation(value = "获取客服电话", tags = {"我的"})
    public ResultUtil<String> getPhone() {
        String phone = sysSetService.selectById(1).getPhone();
        return ResultUtil.success(phone);
    }
//    @ResponseBody
//    @PostMapping("/base/appUser/isAlert")
//    @ApiOperation(value = "是否弹窗提示完善身体数据", tags = {"我的"})
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
//
//    })
//    public ResultUtil<AppUser> updateBankCard() {
//        return ResultUtil.success(appUserService.getAppUser());
//    }
    @ResponseBody
    @PostMapping("/base/appUser/getBankInfo")
    @ApiOperation(value = "获取用户银行卡信息", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public ResultUtil<AppUser> updateBankCard() {
        return ResultUtil.success(appUserService.getAppUser());
    }
    @ResponseBody
    @PostMapping("/base/appUser/couponList")
    @ApiOperation(value = "优惠券管理", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public ResultUtil<List<CouponVO>> withdrawal(CouponQuery req) {
        List<CouponVO> res = new ArrayList<>();
        req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
        AppUser appUser = appUserService.getAppUser();
        req.setUserId(appUser.getId());
        List<CouponReceive> couponReceives = couponReceiveService.getList(req);
        for (CouponReceive couponReceive : couponReceives) {
            Coupon coupon = couponService.selectById(couponReceive.getCouponId());
            CouponVO couponVO = new CouponVO();
            couponVO.setName(coupon.getCouponName());
            couponVO.setMoney(coupon.getMoney());
            couponVO.setReduction(coupon.getReduction());
            couponVO.setCouponId(couponReceive.getCouponId());
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            String format1 = format.format(couponReceive.getStartTime());
            couponVO.setStartTime(format1);
            String format2 = format.format(couponReceive.getEndTime());
            couponVO.setEndTime(format2);
            couponVO.setState(couponReceive.getState());
            res.add(couponVO);
        }
        return ResultUtil.success(res);
    }
    @ResponseBody
    @PostMapping("/base/appUser/withdrawal")
    @ApiOperation(value = "提现记录", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "年", name = "year", dataType = "int"),
            @ApiImplicitParam(value = "月", name = "month", dataType = "int"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"),
    })
    public ResultUtil<List<WithdtawalVO>> withdrawal(Integer year,Integer month,Integer pageNum,Integer pageSize) {
        AppUser appUser = appUserService.getAppUser();
        List<WithdtawalVO> withdtawalVOS = new ArrayList<>();
        Wrapper<Withdrawal> eq1 = new EntityWrapper<Withdrawal>()
                .eq("userId", appUser.getId());
        if (year != null && month != null) {
            LocalDate startDate = LocalDate.of(year, month, 1);
            LocalDate endDate = startDate.plusMonths(1).minusDays(1);
            eq1.ge("insertTime", startDate).le("insertTime", endDate);
        }
        List<String> strings = new ArrayList<>();
        strings.add("insertTime");
        eq1.orderDesc(strings);
        List<Withdrawal> withdrawals = withdrawalService.selectList(eq1);
        for (Withdrawal withdrawal : withdrawals) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            String format1 = format.format(withdrawal.getInsertTime());
            WithdtawalVO withdtawalVO = new WithdtawalVO();
            withdtawalVO.setInsertTime(format1);
            withdtawalVO.setAmount("¥"+withdrawal.getAmount());
            withdtawalVO.setReason(withdrawal.getReason());
            switch (withdrawal.getState()){
                case 1:
                    withdtawalVO.setState("待审核");
                    break;
                case 2:
                    withdtawalVO.setState("已通过");
                    break;
                case 3:
                    withdtawalVO.setState("已拒绝");
                    break;
            }
            withdtawalVOS.add(withdtawalVO);
        }
        List<WithdtawalVO> withdtawalVOS1 = testing2(withdtawalVOS.size(), pageNum, pageSize, withdtawalVOS);
        return ResultUtil.success(withdtawalVOS1);
    }
    public static List<WithdtawalVO> testing2(long total, long current, long size, List<WithdtawalVO> str){
        List<WithdtawalVO> result = new ArrayList<>();
        //获取初始化分页结构
        com.stylefeng.guns.modular.system.util.Page<WithdtawalVO> page = new Page().getPage(total, size, current - 1);
        //获取集合下标初始值
        long startIndex = page.getStartIndex();
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
    @ResponseBody
    @PostMapping("/base/appUser/wallet")
    @ApiOperation(value = "我的钱包", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "年", name = "year", dataType = "int"),
            @ApiImplicitParam(value = "月", name = "month", dataType = "int"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"),
    })
    public ResultUtil<WalletVO> wallet(Integer year,Integer month,Integer pageNum,Integer pageSize) {
        WalletVO walletVO = new WalletVO();
        List<UserDetailVO> detail = new ArrayList<>();
        Integer id = appUserService.getAppUser().getId();
        BigDecimal balance = appUserService.getAppUser().getBalance();
        walletVO.setBalance(balance);
        Wrapper<Recharge> eq1 = new EntityWrapper<Recharge>()
                .eq("userId", id)
                .eq("state", 2);
        // 如果传递了年份和月份,则添加时间条件
        if (year != null && month != null) {
            LocalDate startDate = LocalDate.of(year, month, 1);
            LocalDate endDate = startDate.plusMonths(1).minusDays(1);
            eq1.ge("insertTime", startDate).le("insertTime", endDate);
        }
        // 查询充值记录
        List<Recharge> recharges = rechargeService.selectList(eq1);
        for (Recharge recharge : recharges) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("+"+recharge.getAmount().toString());
            userDetailVO.setType("充值");
            userDetailVO.setInsertTime1(recharge.getInsertTime());
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            String format1 = format.format(recharge.getInsertTime());
            userDetailVO.setInsertTime(format1);
            detail.add(userDetailVO);
        }
        // 查询购课记录 只查询钱包支付的
        Wrapper<OrderCourse> eq2 = new EntityWrapper<OrderCourse>()
                .eq("userId", id)
//                .eq("payType", 3)
                .eq("state", 2);
        // 如果传递了年份和月份,则添加时间条件
        if (year != null && month != null) {
            LocalDate startDate = LocalDate.of(year, month, 1);
            LocalDate endDate = startDate.plusMonths(1).minusDays(1);
            eq2.ge("insertTime", startDate).le("insertTime", endDate);
        }
        List<OrderCourse> orderCourses = orderCourseService.selectList(eq2);
        for (OrderCourse orderCours : orderCourses) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("-"+orderCours.getRealMoney());
            userDetailVO.setType("购买课程");
            userDetailVO.setInsertTime1(orderCours.getInsertTime());
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            String format1 = format.format(orderCours.getInsertTime());
            userDetailVO.setInsertTime(format1);
            detail.add(userDetailVO);
        }
        Wrapper<Order> eq = new EntityWrapper<Order>()
                .eq("userId", id)
//                .eq("payType", 3)
                .eq("state", 2);
        // 如果传递了年份和月份,则添加时间条件
        if (year != null && month != null) {
            LocalDate startDate = LocalDate.of(year, month, 1);
            LocalDate endDate = startDate.plusMonths(1).minusDays(1);
            eq.ge("insertTime", startDate).le("insertTime", endDate);
        }
        List<Order> orders = orderService.selectList(eq);
        // 查询购买套餐记录 只查询钱包支付的
        for (Order order : orders) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("-"+order.getRealMoney());
            userDetailVO.setType("购买套餐");
            userDetailVO.setInsertTime1(order.getInsertTime());
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            String format1 = format.format(order.getInsertTime());
            userDetailVO.setInsertTime(format1);
            detail.add(userDetailVO);
        }
        // 查询提现记录
        Wrapper<Withdrawal> eq3 = new EntityWrapper<Withdrawal>()
                .eq("userId", id);
        // 如果传递了年份和月份,则添加时间条件
        if (year != null && month != null) {
            LocalDate startDate = LocalDate.of(year, month, 1);
            LocalDate endDate = startDate.plusMonths(1).minusDays(1);
            eq3.ge("insertTime", startDate).le("insertTime", endDate);
        }
        List<Withdrawal> withdrawals = withdrawalService.selectList(eq3);
        for (Withdrawal withdrawal : withdrawals) {
            UserDetailVO userDetailVO = new UserDetailVO();
            switch (withdrawal.getState()){
                case 1:
                    userDetailVO.setAmount("-"+withdrawal.getAmount());
                    userDetailVO.setType("提现");
                    break;
                case 2:
                    userDetailVO.setAmount("-"+withdrawal.getAmount());
                    userDetailVO.setType("提现");
                    break;
                case 3:
                    userDetailVO.setAmount("+"+withdrawal.getAmount());
                    userDetailVO.setType("提现失败");
                    break;
            }
            userDetailVO.setInsertTime1(withdrawal.getInsertTime());
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            String format1 = format.format(withdrawal.getInsertTime());
            userDetailVO.setInsertTime(format1);
            detail.add(userDetailVO);
        }
        // 查询是否有邀请过用户 获得消费奖励
        Wrapper<Invite> eq4 = new EntityWrapper<Invite>()
                .eq("giftUserId", id);
        // 如果传递了年份和月份,则添加时间条件
        if (year != null && month != null) {
            LocalDate startDate = LocalDate.of(year, month, 1);
            LocalDate endDate = startDate.plusMonths(1).minusDays(1);
            eq4.ge("insertTime", startDate).le("insertTime", endDate);
        }
        eq4.eq("type",1);
        List<Invite> giftUserId = inviteService.selectList(eq4);
        for (Invite invite : giftUserId) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("+"+invite.getAmount());
            AppUser appUser = appUserService.selectById(invite.getUserId());
            userDetailVO.setType("好友消费:("+appUser.getName()+"消费了"+invite.getConsume()+"元)");
            userDetailVO.setInsertTime1(invite.getInsertTime());
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            String format1 = format.format(invite.getInsertTime());
            userDetailVO.setInsertTime(format1);
            detail.add(userDetailVO);
        }
        // 查询红包发放记录
        Wrapper<RedPackage> eq5 = new EntityWrapper<RedPackage>();
        if (year != null && month != null) {
            LocalDate startDate = LocalDate.of(year, month, 1);
            LocalDate endDate = startDate.plusMonths(1).minusDays(1);
            eq5.ge("insertTime", startDate).le("insertTime", endDate);
        }
        List<RedPackage> redPackages = redPackageService.selectList(eq5);
        for (RedPackage redPackage : redPackages) {
            if (appUserService.getAppUser().getInsertTime().compareTo(redPackage.getInsertTime())>0){
                continue;
            }
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("+"+redPackage.getAmount());
            userDetailVO.setType("平台红包");
            userDetailVO.setInsertTime1(redPackage.getInsertTime());
            SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            String format1 = format.format(redPackage.getInsertTime());
            userDetailVO.setInsertTime(format1);
            detail.add(userDetailVO);
        }
        List<UserDetailVO> sortedList = detail.stream()
                .sorted(Comparator.comparing(UserDetailVO::getInsertTime1).reversed())
                .collect(Collectors.toList());
        List<UserDetailVO> testing = testing(sortedList.size(), pageNum, pageSize, sortedList);
        walletVO.setDetails(testing);
        return ResultUtil.success(walletVO);
    }
    public static List<UserDetailVO> testing(long total, long current, long size, List<UserDetailVO> str){
        List<UserDetailVO> result = new ArrayList<>();
        //获取初始化分页结构
        com.stylefeng.guns.modular.system.util.Page<UserDetailVO> page = new Page().getPage(total, size, current - 1);
        //获取集合下标初始值
        long startIndex = page.getStartIndex();
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
    @ResponseBody
    @PostMapping("/base/appUser/changeConstellation")
    @ApiOperation(value = "切换星座", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "星座名称(狮子座)", name = "consName"),
    })
    public ResultUtil changeConstellation(String consName ) {
        AppUser appUser = appUserService.getAppUser();
        appUser.setConstellation(consName);
        appUserService.updateById(appUser);
        return ResultUtil.success();
    }
    public static String getZodiacSign(int month, int day) {
        if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) {
            return "白羊座";
        } else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) {
            return "金牛座";
        } else if ((month == 5 && day >= 21) || (month == 6 && day <= 20)) {
            return "双子座";
        } else if ((month == 6 && day >= 21) || (month == 7 && day <= 22)) {
            return "巨蟹座";
        } else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) {
            return "狮子座";
        } else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) {
            return "处女座";
        } else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) {
            return "天秤座";
        } else if ((month == 10 && day >= 23) || (month == 11 && day <= 21)) {
            return "天蝎座";
        } else if ((month == 11 && day >= 22) || (month == 12 && day <= 21)) {
            return "射手座";
        } else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) {
            return "摩羯座";
        } else if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) {
            return "水瓶座";
        } else {
            return "双鱼座";
        }
    }
    @ResponseBody
    @PostMapping("/base/appUser/constellation")
    @ApiOperation(value = "星座运势", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "星座名称(狮子座)", name = "consName"),
            @ApiImplicitParam(value = "类型 today=今日 tomorrow=明日 week=本周 month=本月 year=本年 ", name = "type",required = true)
    })
    public ResultUtil<ConstellationVO> constellation(String consName,String type ) {
        // 没有指定星座 那么查询当月星座
        LocalDate currentDate = LocalDate.now();
        int month = currentDate.getMonthValue();
        int day = currentDate.getDayOfMonth();
        AppUser appUser = appUserService.getAppUser();
        if (!StringUtils.hasLength(appUser.getConstellation())){
            // 根据月份和日期确定星座
            consName = getZodiacSign(month, day);
        }
        if (!StringUtils.hasLength(consName)){
            ConstellationVO constellation = getConstellation(appUser.getConstellation(), type);
            constellation.setName(consName);
            return ResultUtil.success(constellation);
        }else {
            ConstellationVO constellation = getConstellation(consName, type);
            appUser.setConstellation(consName);
            constellation.setName(consName);
//            appUserService.updateById(appUser);
            return ResultUtil.success(constellation);
        }
    }
    @ResponseBody
    @PostMapping("/base/appUser/deleteFind")
    @ApiOperation(value = "删除动态", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "动态id", name = "findId", dataType = "int"),
    })
    public ResultUtil feedBack(Integer findId) {
        Find find = findService.selectById(findId);
        find.setIsDelete(1);
        findService.updateById(find);
        return ResultUtil.success("删除成功");
    }
    @ResponseBody
    @PostMapping("/base/appUser/myFind")
    @ApiOperation(value = "我的动态", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int")
    })
    public ResultUtil<List<FindVO>> myFind(Integer pageNum,Integer pageSize) {
        Integer id = appUserService.getAppUser().getId();
        AppUser appUser = appUserService.getAppUser();
        List<String> strings = new ArrayList<>();
        strings.add("insertTime");
        List<Find> finds = findService.selectList(new EntityWrapper<Find>()
                .eq("userId", id)
                .eq("state", 1)
                .orderDesc(strings)
                .eq("isDelete", 0));
        List<FindVO> res = new ArrayList<>();
        for (Find find : finds) {
            FindVO temp = new FindVO();
            BeanUtils.copyProperties(find,temp);
            // 计算每个动态的评论数量
            int size = findCommentService.selectList(new EntityWrapper<FindComment>()
                    .eq("findId", find.getId())
                    .eq("isShow", 1)).size();
            temp.setComment(size);
            temp.setClockIn(appUser.getClockIn());
            temp.setHeadImg(appUser.getHeadImg());
            temp.setUserName(appUser.getName());
            res.add(temp);
        }
        List<FindVO> findVOS = testing3(res.size(), pageNum, pageSize, res);
        return ResultUtil.success(findVOS);
    }
    public static List<FindVO> testing3(long total, long current, long size, List<FindVO> str){
        List<FindVO> result = new ArrayList<>();
        //获取初始化分页结构
        com.stylefeng.guns.modular.system.util.Page<FindVO> page = new Page().getPage(total, size, current - 1);
        //获取集合下标初始值
        long startIndex = page.getStartIndex();
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
    @ResponseBody
    @PostMapping("/base/appUser/useGuide")
    @ApiOperation(value = "使用指南", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "title", value = "标题"),
    })
    public ResultUtil<List<UseGuide>> useGuide(String title) {
        EntityWrapper<UseGuide> wrapper = new EntityWrapper<>();
        List<String> strings = new ArrayList<>();
        strings.add("sort");
        wrapper.orderDesc(strings);
        if (StringUtils.hasLength(title)){
            wrapper.like("title",title);
        }
        wrapper.eq("isDelete",0);
        List<UseGuide> useGuides = useGuideService.selectList(wrapper);
        return ResultUtil.success(useGuides);
    }
    @ResponseBody
    @PostMapping("/base/appUser/setUnit")
    @ApiOperation(value = "设置APP体重单位", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "type", value = "1公斤 2斤 3磅 ", required = true),
    })
    public ResultUtil setUnit(Integer type) {
        AppUser appUser = appUserService.getAppUser();
        appUser.setUnit(type);
        appUserService.updateById(appUser);
        return ResultUtil.success("设置成功");
    }
    @ResponseBody
    @PostMapping("/base/appUser/setWeight")
    @ApiOperation(value = "记录体重/设置目标体重", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "type", value = "1=设置目标体重 2=记录体重 ", required = true),
            @ApiImplicitParam(name = "weight", value = "体重")
    })
    public ResultUtil setWeight(Integer type ,Double weight) {
        Double temp = 0.0;
        AppUser appUser = appUserService.getAppUser();
        switch (appUser.getUnit()){
            case 1:
                temp = weight;
                break;
            case 2:
                temp = weight/2;
                break;
            case 3:
                temp = weight*0.45;
                break;
        }
        switch (type){
            case 1:
                appUser.setTarget(temp);
                appUserService.updateById(appUser);
                break;
            case 2:
                // 如果首次记录
                if (appUser.getWeight() == null || appUser.getWeight() == 0){
                    appUser.setWeight(temp);
                    appUser.setRecordTime(new Date());
                    appUserService.updateById(appUser);
                    UserRecord userRecord = new UserRecord();
                    userRecord.setUserId(appUser.getId());
                    userRecord.setRecordTime(new Date());
                    userRecord.setWeight(temp);
                    recordService.insert(userRecord);
                }else{
                    // 如果是第二次记录
                    Double weight1 = appUser.getWeight();
                    appUser.setBeforeWeight(weight1);
                    appUser.setWeight(temp);
                    appUser.setRecordTime(new Date());
                    appUserService.updateById(appUser);
                    // 添加历史记录
                    UserRecord userRecord = new UserRecord();
                    userRecord.setUserId(appUser.getId());
                    userRecord.setRecordTime(new Date());
                    userRecord.setWeight(temp);
                    recordService.insert(userRecord);
                }
                break;
        }
        return ResultUtil.success("设置成功");
    }
    @Autowired
    private AuditUtil auditUtil;
    @ResponseBody
    @PostMapping("/base/appUser/feedBack")
    @ApiOperation(value = "反馈与建议", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "content", value = "反馈内容", required = true),
            @ApiImplicitParam(name = "img", value = "图片地址,多张逗号隔开")
    })
    public ResultUtil feedBack(String content,String img) {
        AuditVO content1 = auditUtil.content(content);
        switch (content1.getType()){
            case "terrorism":
                return ResultUtil.error("反馈内容涉及暴恐");
            case "porn":
                return ResultUtil.error("反馈内容涉及色情");
            case "ban":
                return ResultUtil.error("反馈内容违禁");
            case "abuse":
                return ResultUtil.error("反馈内容涉及辱骂");
            case "ad":
                return ResultUtil.error("反馈内容涉及广告");
            case "politics":
                return ResultUtil.error("反馈内容涉及政治");
        }
        Feedback feedback = new Feedback();
        feedback.setUserId(appUserService.getAppUser().getId());
        feedback.setContent(content);
        feedback.setImg(img);
        feedback.setInsertTime(new Date());
        feedbackService.insert(feedback);
        return ResultUtil.success("反馈成功");
    }
    @ResponseBody
    @PostMapping("/base/appUser/userInfo")
    @ApiOperation(value = "主页", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<UserInfoVO> userInfo() {
        UserInfoVO userInfoVO = new UserInfoVO();
        AppUser appUser = appUserService.getAppUser();
        userInfoVO.setConstellation(appUser.getConstellation());
        BeanUtils.copyProperties(appUser,userInfoVO);
        if (appUser.getConstellation() == null){
            LocalDate currentDate = LocalDate.now();
            int month = currentDate.getMonthValue();
            int day = currentDate.getDayOfMonth();
            String zodiacSign = getZodiacSign(month, day);
            userInfoVO.setConstellation(zodiacSign);
        }
        switch (appUser.getUnit()){
            case 2:
                if (userInfoVO.getWeight()!=null){
                    userInfoVO.setWeight(userInfoVO.getWeight()*2);
                }
                if (userInfoVO.getTarget()!=null){
                    userInfoVO.setTarget(userInfoVO.getTarget()*2);
                }
                break;
            case 3:
                if (userInfoVO.getWeight()!=null){
                    DecimalFormat df = new DecimalFormat("#.##");
                    // 设置四舍五入模式为 HALF_UP
                    df.setRoundingMode(RoundingMode.HALF_UP);
                    double v = userInfoVO.getWeight() / 0.45;
                    // 使用 DecimalFormat 对象进行四舍五入
                    double roundedNumber = Double.parseDouble(df.format(v));
                    userInfoVO.setWeight(roundedNumber);
                }
                if (userInfoVO.getTarget()!=null){
                    DecimalFormat df = new DecimalFormat("#.##");
                    // 设置四舍五入模式为 HALF_UP
                    df.setRoundingMode(RoundingMode.HALF_UP);
                    double v = userInfoVO.getTarget() / 0.45;
                    // 使用 DecimalFormat 对象进行四舍五入
                    double roundedNumber = Double.parseDouble(df.format(v));
                    userInfoVO.setTarget(roundedNumber);
                }
                break;
        }
        SimpleDateFormat format9 = new SimpleDateFormat("yyyy.MM.dd");
        if (appUser.getBirthday() != null){
            String format10 = format9.format(appUser.getBirthday());
            userInfoVO.setBirthday(format10);
        }
        // 如果记录过体重 计算体重距离上次
        if (appUser.getBeforeWeight()!=null){
            switch (appUser.getUnit()){
                case 1:
                    userInfoVO.setDistanceBefore(appUser.getWeight()-appUser.getBeforeWeight());
                    break;
                case 2:
                    userInfoVO.setDistanceBefore((appUser.getWeight()*2)-(appUser.getBeforeWeight()*2));
                    break;
                case 3:
                    DecimalFormat df = new DecimalFormat("#.##");
                    // 设置四舍五入模式为 HALF_UP
                    df.setRoundingMode(RoundingMode.HALF_UP);
                    double v = (appUser.getWeight()/0.45)-(appUser.getBeforeWeight()/0.45);
                    // 使用 DecimalFormat 对象进行四舍五入
                    double roundedNumber = Double.parseDouble(df.format(v));
                    userInfoVO.setDistanceBefore(roundedNumber);
                    break;
            }
        }else{
            userInfoVO.setDistanceBefore(0.0);
        }
        // 如果记录了目标体重
        if (appUser.getTarget()!=null && appUser.getWeight()!=null){
            switch (appUser.getUnit()){
                case 1:
                    userInfoVO.setDistanceTarget
                            (appUser.getWeight()-appUser.getTarget());
                    break;
                case 2:
                    userInfoVO.setDistanceTarget
                            ((appUser.getWeight()*2)-(appUser.getTarget()* 2));
                    break;
                case 3:
                    DecimalFormat df = new DecimalFormat("#.##");
                    // 设置四舍五入模式为 HALF_UP
                    df.setRoundingMode(RoundingMode.HALF_UP);
                    double v = (appUser.getWeight() / 0.45)-(appUser.getTarget() / 0.45);
                    // 使用 DecimalFormat 对象进行四舍五入
                    double roundedNumber = Double.parseDouble(df.format(v));
                    userInfoVO.setDistanceTarget(roundedNumber);
                    break;
            }
        }else{
            userInfoVO.setDistanceTarget(0.0);
        }
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
        String format1 = format.format(date);
        userInfoVO.setNowDate(format1);
        SimpleDateFormat format2 = new SimpleDateFormat("MM月dd日");
        if (appUser.getRecordTime()!=null){
            String format3 = format2.format(date);
            userInfoVO.setRecordTime(format3);
        }else{
            userInfoVO.setRecordTime("暂无记录");
        }
        long ageInYears = 0;
        if (appUser.getBirthday()!=null){
        Date birthday = appUser.getBirthday();
        // 获取当前时间的时间戳
        long currentTime = System.currentTimeMillis();
        // 获取出生日期的时间戳
        long birthTime = birthday.getTime();
        // 计算年龄差,转换为年份
        long diff = currentTime - birthTime;
        ageInYears = diff / (1000L * 60 * 60 * 24 * 365);
        userInfoVO.setAge(ageInYears);
        }
        if (appUser.getWeight()== null){
            userInfoVO.setWeight(0.00);
        }
        if (appUser.getHeight()== null){
            userInfoVO.setHeight(0);
        }
        if (appUser.getHeight()!=null && appUser.getWeight()!=null && appUser.getGender()!=null  ){
            System.err.println("userInfo:");
            System.err.println(appUser.getHeight());
            System.err.println(appUser.getGender());
            System.err.println(appUser.getWeight());
            // 获取当前BMI 20
            BMIVO bmi = getBMI(userInfoVO, appUser.getHeight(), appUser.getGender(), appUser.getWeight());
            userInfoVO.setBMIInfo(bmi.getMsg());
            userInfoVO.setBMI(bmi.getBmi());
            // 当前BMI
            Double aDouble = Double.valueOf(bmi.getBmi());
            if (appUser.getBeforeWeight()!=null){
                // 如果记录过2次体重 计算BMI变化 18
                BMIVO bmi1 = getBMI(userInfoVO, appUser.getHeight(), appUser.getGender(), appUser.getBeforeWeight());
                Double aDouble1 = Double.valueOf(bmi1.getBmi());
                double v = aDouble - aDouble1;
                userInfoVO.setDistanceBMI(v);
            }else{
                userInfoVO.setDistanceBMI(0.0);
            }
            if (appUser.getWaistline()!=null){
                // 计算体脂率
                String bfr = getBfr(appUser.getGender(), appUser.getWeight(), appUser.getWaistline());
                userInfoVO.setPercentage(bfr);
            }
            // 计算卡路里消耗量
            if (appUser.getBirthday()==null){
                long temp = 18;
                String calorie = getCalorie(appUser.getHeight(), appUser.getWeight(), temp);
                userInfoVO.setCalorie(calorie);
            }else{
                String calorie = getCalorie(appUser.getHeight(), appUser.getWeight(), ageInYears);
                userInfoVO.setCalorie(calorie);
            }
        }
        // 获取健康提示
        String content = getContent();
        userInfoVO.setTips(content);
        // 获取健康指数
        if (appUser.getBirthday()==null) {
            long temp = 18;
            String index = getIndex(appUser.getHeight(), appUser.getGender(), appUser.getWeight(), temp);
            userInfoVO.setIndex(index);
        }else{
            String index = getIndex(appUser.getHeight(), appUser.getGender(), appUser.getWeight(), ageInYears);
            userInfoVO.setIndex(index);
        }
        List<String> strings = new ArrayList<>();
        strings.add("recordTime");
        // 查询用户的体重趋势
        List<UserRecord> userId = recordService.selectList(new EntityWrapper<UserRecord>()
                .eq("userId", appUser.getId())
                .orderDesc(strings)
                .last("LIMIT 5"));
        Collections.reverse(userId);
        List<WeightVO> weightVOS = new ArrayList<>();
        for (UserRecord userRecord : userId) {
            SimpleDateFormat format3 = new SimpleDateFormat("M.d");
            Date recordTime = userRecord.getRecordTime();
            String format4 = format3.format(recordTime);
            WeightVO weightVO = new WeightVO();
            weightVO.setTime(format4);
            switch (appUser.getUnit()){
                case 1:
                        weightVO.setWeight(userRecord.getWeight());
                        break;
                case 2:
                        weightVO.setWeight(userRecord.getWeight()*2);
                    break;
                case 3:
                        DecimalFormat df = new DecimalFormat("#.##");
                        // 设置四舍五入模式为 HALF_UP
                        df.setRoundingMode(RoundingMode.HALF_UP);
                        double v = userRecord.getWeight() / 0.45;
                        // 使用 DecimalFormat 对象进行四舍五入
                        double roundedNumber = Double.parseDouble(df.format(v));
                        weightVO.setWeight(roundedNumber);
                    break;
            }
            weightVOS.add(weightVO);
        }
        userInfoVO.setWeightTrend(weightVOS);
        return ResultUtil.success(userInfoVO);
    }
    // 单位转换
    private double changeUnit(Double weight,Integer unit) {
        double temp = 0.00;
        // 先判断用户的单位
        switch (unit){
            case 1:
                temp = weight;
                break;
            case 2:
                // 如果用户单位是斤
                temp = weight/2;
                break;
            case 3:
                // 如果用户单位是磅
                temp = weight/0.45;
                break;
        }
        return temp;
    }
    public static void main(String[] args) {
        UserInfoVO userInfoVO = new UserInfoVO();
        BMIVO bmi = getBMI(userInfoVO, 160, 2, 58D);
        System.err.println(bmi);
    }
    private static BMIVO getBMI(UserInfoVO userInfoVO, Integer height,Integer gender, Double temp) {
        String url = "http://apis.juhe.cn/fapig/calculator/weight";
        Map<String, String> params = new HashMap<String, String>();
        params.put("key", "ce258c37399af9afa4c9b458d3a47837"); // 在个人中心->我的数据,接口名称上方查看
        params.put("height", ""+height); // 身高(CM), 支持最多1位小数; 如: 178
        params.put("weight", ""+temp); // 体重(KG), 支持最多1位小数; 如: 67.8
        params.put("role", "1"); // 计算标准, 1:中国 2:亚洲 3:国际, 默认1
        if (gender == null){
            gender = 1;
        }
        params.put("sex", ""+gender); // 性别1男2女
//        BMIVO bmivo = new BMIVO();
//            bmivo.setBmi("25");
//            bmivo.setMsg("正常");
//        return bmivo;
        String response = HttpRequestUtil.postRequest(url, params);
        try {
            Gson gson = new Gson();
            // 解析请求结果,json:
            JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
            if (!jsonObject.get("error_code").getAsString().equals("0")){
                        BMIVO bmivo = new BMIVO();
            bmivo.setBmi("0");
            bmivo.setMsg("");
        return bmivo;
            }
            System.out.println(jsonObject);
            JsonObject res = jsonObject.getAsJsonObject("result");
            String idealWeight = res.get("idealWeight").toString();
            String normalWeight = res.get("normalWeight").toString();
            String level = res.get("level").toString();
            JsonElement levelMsg = res.get("levelMsg");
            String asString = levelMsg.getAsString();
            String danger = res.get("danger").toString();
            String bmi = res.get("bmi").toString();
            String normalBMI = res.get("normalBMI").toString();
            BMIVO bmivo = new BMIVO();
            bmivo.setBmi(bmi);
            bmivo.setMsg(asString);
            return bmivo;
            // 具体返回示例值,参考返回参数说明、json返回示例
        } catch (Exception e) {
            e.printStackTrace();
        }
        BMIVO bmivo = new BMIVO();
        bmivo.setBmi("0");
        bmivo.setMsg("");
        return bmivo;
    }
    // 健康小提示
    private String getContent() {
        String url = "http://apis.juhe.cn/fapigx/healthtip/query";
        Map<String, String> params = new HashMap<String, String>();
        params.put("key", "f70c780965106bc187c61f8aeca8fb5f");
//        return "健康小提示";
        String response = HttpRequestUtil.postRequest(url, params);
        try {
            Gson gson = new Gson();
            // 解析请求结果,json:
            JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
            if (!jsonObject.get("error_code").getAsString().equals("0")){
                        return "";
            }
            System.out.println(jsonObject);
            JsonObject res = jsonObject.getAsJsonObject("result");
            return res.get("content").getAsString();
            // 具体返回示例值,参考返回参数说明、json返回示例
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    // 获取健康指数
    private String getIndex(Integer height,Integer gender, Double temp,Long age) {
        String url = "http://apis.juhe.cn/fapig/healthy/bmr";
        Map<String, String> params = new HashMap<String, String>();
        params.put("key", "c28bcb61589b8943ea35887e4fd35afe"); // 在个人中心->我的数据,接口名称上方查看
        params.put("height", ""+height); // 身高(CM), 支持最多1位小数; 如: 178
        params.put("weight", ""+temp); // 体重(KG), 支持最多1位小数; 如: 67.8
        if (gender == null){
            gender = 1;
        }
        params.put("sex", ""+gender); // 性别1男2女
        params.put("age", ""+age); // 性别1男2女
//        return "170-180";
        // 记得去除大卡
        String response = HttpRequestUtil.postRequest(url, params);
        try {
            Gson gson = new Gson();
            // 解析请求结果,json:
            JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
            if (!jsonObject.get("error_code").getAsString().equals("0")){
                return "";
            }
            System.out.println(jsonObject);
            JsonObject res = jsonObject.getAsJsonObject("result");
            String range = res.get("range").getAsString();
            String range1 = range.replace("大卡", "");
            return range1;
            // 具体返回示例值,参考返回参数说明、json返回示例
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    // 获取体脂率
    private String getBfr(Integer gender, Double temp,Integer waistline) {
        String url = "http://apis.juhe.cn/fapig/healthy/bfr";
        Map<String, String> params = new HashMap<String, String>();
        params.put("key", "c28bcb61589b8943ea35887e4fd35afe"); // 在个人中心->我的数据,接口名称上方查看
        if (gender == null){
            gender = 1;
        }
        params.put("sex", ""+gender); // 性别1男2女
        params.put("weight", ""+temp);
        params.put("waistline", ""+waistline);
//        return "17%";
        String response = HttpRequestUtil.postRequest(url, params);
        try {
            Gson gson = new Gson();
            // 解析请求结果,json:
            JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
            if (!jsonObject.get("error_code").getAsString().equals("0")){
                        return "";
            }
            System.out.println(jsonObject);
            JsonObject res = jsonObject.getAsJsonObject("result");
            return res.get("bfr").getAsString();
            // 具体返回示例值,参考返回参数说明、json返回示例
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    // 获取每日卡路里参数
    private String getCalorie(Integer height, Double temp,Long age) {
        String url = "http://apis.juhe.cn/fapig/healthy/calorie";
        Map<String, String> params = new HashMap<String, String>();
        params.put("key", "c28bcb61589b8943ea35887e4fd35afe"); // 在个人中心->我的数据,接口名称上方查看
        params.put("height", ""+height); // 身高(CM), 支持最多1位小数; 如: 178
        params.put("weight", ""+temp); // 体重(KG), 支持最多1位小数; 如: 67.8
        params.put("age", ""+age); // 性别1男2女
        params.put("level", ""+3);
//        return "0 ~ 0 ";
        String response = HttpRequestUtil.postRequest(url, params);
        try {
            Gson gson = new Gson();
            // 解析请求结果,json:
            JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
            if (!jsonObject.get("error_code").getAsString().equals("0")){
                        return "";
            }
            System.out.println(jsonObject);
            JsonObject res = jsonObject.getAsJsonObject("result");
            String replace = res.get("range").getAsString().replace("大卡", "");
            return replace;
            // 具体返回示例值,参考返回参数说明、json返回示例
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public  ConstellationVO getConstellation(String consName,String type) {
        String url = "http://web.juhe.cn/constellation/getAll";
        Map<String, String> params = new HashMap<String, String>();
        params.put("key", "ff7550b2aaaa4c759a6b5d9726ba4507"); // 在个人中心->我的数据,接口名称上方查看
        params.put("consName", ""+consName);// 星座名称,如:狮子座
        params.put("type", ""+type);// 运势类型:today,tomorrow,week,month,year
        String response = HttpRequestUtil.postRequest(url, params);
        try {
            Gson gson = new Gson();
//            response ="{\n" +
//                    "        \"name\": \"狮子座\",/*星座名称*/\n" +
//                    "        \"datetime\": \"2014年06月27日\",/*日期*/\n" +
//                    "        \"date\": 20140627,\n" +
//                    "        \"all\": \"89\", /*综合指数*/\n" +
//                    "        \"color\": \"古铜色\", /*幸运色*/\n" +
//                    "        \"health\": \"95\", /*健康指数*/\n" +
//                    "        \"love\": \"80\",/*爱情指数*/\n" +
//                    "        \"money\": \"84\",/*财运指数*/\n" +
//                    "        \"number\": 8,/*幸运数字*/\n" +
//                    "        \"QFriend\": \"处女座\",/*速配星座*/\n" +
//                    "        \"summary\": \"有些思考的小漩涡,可能让你忽然的放空,生活中许多的细节让你感触良多,五味杂陈,\n" +
//                    "常常有时候就慢动作定格,想法在某处冻结停留,陷入一阵自我对话的沉思之中,这个时候你不喜欢被打扰\n" +
//                    "或询问,也不想让某些想法曝光,个性变得有些隐晦。\",/*今日概述*/\n" +
//                    "        \"work\": \"80\"/*工作指数*/\n" +
//                    "        \"error_code\": 0/*返回码*/\n" +
//                    "}";
            // 解析请求结果,json:
            JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
            if (!jsonObject.get("error_code").getAsString().equals("0")){
//                            response ="{\n" +
//                    "        \"name\": \"狮子座\",/*星座名称*/\n" +
//                    "        \"datetime\": \"2014年06月27日\",/*日期*/\n" +
//                    "        \"date\": 20140627,\n" +
//                    "        \"all\": \"89\", /*综合指数*/\n" +
//                    "        \"color\": \"古铜色\", /*幸运色*/\n" +
//                    "        \"health\": \"95\", /*健康指数*/\n" +
//                    "        \"love\": \"80\",/*爱情指数*/\n" +
//                    "        \"money\": \"84\",/*财运指数*/\n" +
//                    "        \"number\": 8,/*幸运数字*/\n" +
//                    "        \"QFriend\": \"处女座\",/*速配星座*/\n" +
//                    "        \"summary\": \"有些思考的小漩涡,可能让你忽然的放空,生活中许多的细节让你感触良多,五味杂陈,\n" +
//                    "常常有时候就慢动作定格,想法在某处冻结停留,陷入一阵自我对话的沉思之中,这个时候你不喜欢被打扰\n" +
//                    "或询问,也不想让某些想法曝光,个性变得有些隐晦。\",/*今日概述*/\n" +
//                    "        \"work\": \"80\"/*工作指数*/\n" +
//                    "        \"error_code\": 0/*返回码*/\n" +
//                    "}";
//                            System.out.println(jsonObject);
//            String name = jsonObject.get("name").getAsString();
//            String datetime = jsonObject.get("datetime").getAsString();
//            String all = jsonObject.get("all").getAsString();
//            String color = jsonObject.get("color").getAsString();
//            String health = jsonObject.get("health").getAsString();
//            String love = jsonObject.get("love").getAsString();
//            String money = jsonObject.get("money").getAsString();
//            String number = jsonObject.get("number").toString();
//            String QFriend = jsonObject.get("QFriend").getAsString();
//            String summary = jsonObject.get("summary").getAsString();
//            String work = jsonObject.get("work").getAsString();
            ConstellationVO constellationVO = new ConstellationVO();
            constellationVO.setName("");
            constellationVO.setQFriend("");
            constellationVO.setAll("");
            constellationVO.setColor("");
            constellationVO.setHealth("");
            constellationVO.setLove("");
            constellationVO.setMoney("");
            constellationVO.setNumber("");
            constellationVO.setSummary("");
            constellationVO.setDatetime("");
            constellationVO.setWork("");
            return constellationVO;
            }
//            System.out.println(jsonObject);
//            String name = jsonObject.get("name").getAsString();
//            String datetime = jsonObject.get("datetime").getAsString();
//            String all = jsonObject.get("all").getAsString();
//            String color = jsonObject.get("color").getAsString();
//            String health = jsonObject.get("health").getAsString();
//            String love = jsonObject.get("love").getAsString();
//            String money = jsonObject.get("money").getAsString();
//            String number = jsonObject.get("number").toString();
//            String QFriend = jsonObject.get("QFriend").getAsString();
//            String summary = jsonObject.get("summary").getAsString();
//            String work = jsonObject.get("work").getAsString();
//            ConstellationVO constellationVO = new ConstellationVO();
//            constellationVO.setName("狮子座");
//            constellationVO.setQFriend("处女座");
//            constellationVO.setAll("89");
//            constellationVO.setColor("古铜色");
//            constellationVO.setHealth("80");
//            constellationVO.setLove("80");
//            constellationVO.setMoney("80");
//            constellationVO.setNumber("8");
//            constellationVO.setSummary("有些思考的小漩涡,可能让你忽然的放空,生活中许多的细节让你感触良多,五味杂陈, 常常有时候就慢动作定格,想法在某处冻结停留,陷入一阵自我对话的沉思之中,这个时候你不喜欢被打扰或询问,也不想让某些想法曝光,个性变得有些隐晦。");
//            constellationVO.setDatetime("2014年06月27日");
//            constellationVO.setWork("80");
//            return constellationVO;
            if (type.equals("week")){
                ConstellationVO constellationVO = new ConstellationVO();
                String name = jsonObject.get("name").getAsString();
                String date = jsonObject.get("date").getAsString();
                String replace = date.replace("年", ".").replace("月", ".").replace("日", "");
                String health = jsonObject.get("health").getAsString();
                String love = jsonObject.get("love").getAsString();
                String money = jsonObject.get("money").getAsString();
                String work = jsonObject.get("work").getAsString();
                constellationVO.setSummary(name+health+love+money+work);
                constellationVO.setDatetime(replace);
                constellationVO.setName(name);
                return constellationVO;
            }else if (type.equals("month")){
                ConstellationVO constellationVO = new ConstellationVO();
                String name = jsonObject.get("name").getAsString();
                String date = jsonObject.get("date").getAsString();
                String all = jsonObject.get("all").getAsString();
                String health = jsonObject.get("health").getAsString();
                String love = jsonObject.get("love").getAsString();
                String money = jsonObject.get("money").getAsString();
                String work = jsonObject.get("work").getAsString();
                constellationVO.setDatetime(date);
                constellationVO.setName(name);
                constellationVO.setSummary(all+health+love+money+work);
                return constellationVO;
            }else if (type.equals("year")){
                ConstellationVO constellationVO = new ConstellationVO();
                String name = jsonObject.get("name").getAsString();
                String date = jsonObject.get("date").getAsString();
                JsonObject mima = jsonObject.getAsJsonObject("mima");
                String info = mima.get("info").getAsString();
                constellationVO.setInfo(info);
                String text = mima.get("text").getAsString();
                String career = jsonObject.get("career").getAsString();
                String love = jsonObject.get("love").getAsString();
                String finance = jsonObject.get("finance").getAsString();
                constellationVO.setDatetime(date);
                constellationVO.setName(name);
                constellationVO.setSummary(info+text+career+love+finance);
                return constellationVO;
            }else{
            String name = jsonObject.get("name").getAsString();
            String datetime = jsonObject.get("datetime").getAsString();
            String replace = datetime.replace("年", ".")
                        .replace("月", ".")
                        .replace("日", "");
                String all = jsonObject.get("all").getAsString();
            String color = jsonObject.get("color").getAsString();
            String health = jsonObject.get("health").getAsString();
            String love = jsonObject.get("love").getAsString();
            String money = jsonObject.get("money").getAsString();
            String number = jsonObject.get("number").toString();
            String QFriend = jsonObject.get("QFriend").getAsString();
            String summary = jsonObject.get("summary").getAsString();
            String work = jsonObject.get("work").getAsString();
            ConstellationVO constellationVO = new ConstellationVO();
            constellationVO.setName(name);
            constellationVO.setQFriend(QFriend);
            constellationVO.setAll(all);
            constellationVO.setColor(color);
            constellationVO.setHealth(health);
            constellationVO.setLove(love);
            constellationVO.setMoney(money);
            constellationVO.setNumber(number);
            constellationVO.setSummary(summary);
            constellationVO.setDatetime(replace);
            constellationVO.setWork(work);
            return constellationVO;
            }
            // 具体返回示例值,参考返回参数说明、json返回示例
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ConstellationVO();
    }
    @Autowired
    private IUserCollectService userCollectService;
    @ResponseBody
    @PostMapping("/base/appUser/collectCourse")
    @ApiOperation(value = "收藏课程", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<List<CourseList>> collectCourse(CourseQuery req) {
        req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
        Integer id = appUserService.getAppUser().getId();
        // 查询用户已收藏的课程ids
        List<Integer> courseIds = collectService.selectList(new EntityWrapper<UserCollect>()
                .eq("userId", id)).stream().map(UserCollect::getCourseId)
                .collect(Collectors.toList());
        if (courseIds.size()==0){
            courseIds.add(-1);
        }
        req.setCourseIds(courseIds);
        // 查询出收藏的课程 并且将免费的展示在最前面
        List<CourseList> res = courseService.courseSearch(req);
        for (CourseList re : res) {
            Integer id1 = re.getId();
            UserCollect userCollect = userCollectService.selectOne(new EntityWrapper<UserCollect>()
                    .eq("userId", id)
                    .eq("courseId", id1));
            if (userCollect!=null){
                re.setIsCollect(1);
            }else{
                re.setIsCollect(0);
            }
        }
        return ResultUtil.success(res);
    }
    @Autowired
    private IFitnessPositionService fitnessPositionService;
    @ResponseBody
    @PostMapping("/base/appUser/getPosition")
    @ApiOperation(value = "收藏课程-获取部位列表", tags = {"我的"})
    public ResultUtil<List<String>> getPosition() {
        List<String> isDelete = fitnessPositionService.selectList(new EntityWrapper<FitnessPosition>()
                .eq("isDelete", 0)).stream().map(FitnessPosition::getName).distinct().collect(Collectors.toList());
        return ResultUtil.success(isDelete);
    }
    @ResponseBody
    @PostMapping("/base/appUser/updateUserInfo")
    @ApiOperation(value = "修改个人资料", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil updateUserInfo(UpdateAppUserDTO dto) {
        if(StringUtils.hasLength(dto.getHeadImg())){
            AuditVO image = auditUtil.image(dto.getHeadImg());
            switch (image.getType()){
                case "terrorism":
                    return ResultUtil.error("上传的头像图片涉及违规内容,请重新上传");
                case "porn":
                    return ResultUtil.error("上传的头像图片涉及违规内容,请重新上传");
                case "ban":
                    return ResultUtil.error("上传的头像图片涉及违规内容,请重新上传");
                case "abuse":
                    return ResultUtil.error("上传的头像图片涉及违规内容,请重新上传");
                case "ad":
                    return ResultUtil.error("上传的头像图片涉及违规内容,请重新上传");
                case "politics":
                    return ResultUtil.error("上传的头像图片涉及违规内容,请重新上传");
            }
        }
        if (StringUtils.hasLength(dto.getName())){
            // 判断用户名是否重复
            List<AppUser> users = appUserService.selectList(new EntityWrapper<AppUser>()
                    .eq("name", dto.getName())
            .ne("state",3));
            if (users.size()>0){
                return ResultUtil.error("当前用户名已存在");
            }
            AuditVO content = auditUtil.content(dto.getName());
            switch (content.getType()){
                case "terrorism":
                    return ResultUtil.error("姓名涉及暴恐");
                case "porn":
                    return ResultUtil.error("姓名涉及色情");
                case "ban":
                    return ResultUtil.error("姓名违禁");
                case "abuse":
                    return ResultUtil.error("姓名涉及辱骂");
                case "ad":
                    return ResultUtil.error("姓名涉及广告");
                case "politics":
                    return ResultUtil.error("姓名涉及政治");
            }
        }
        AppUser appUser = appUserService.getAppUser();
        // 根据当前用户所选择的单位 将weight置换成公斤存储
        if (dto.getWeight()!=null){
            // 本次体重
            double v = changeUnit(dto.getWeight(), appUser.getUnit());
            switch (appUser.getUnit()){
                case 1:
                    v = dto.getWeight();
                    break;
                case 2:
                    v = dto.getWeight()/2;
                    break;
                case 3:
                    v = dto.getWeight()*0.45;
                    break;
            }
            // 判断用户是否是第一次记录体重
            // 如果首次记录
            if (appUser.getWeight() == null || appUser.getWeight() == 0){
                appUser.setWeight(v);
                UserRecord userRecord = new UserRecord();
                userRecord.setUserId(appUser.getId());
                userRecord.setRecordTime(new Date());
                userRecord.setWeight(v);
                recordService.insert(userRecord);
            }else{
                // 如果是第二次记录
                Double weight1 = appUser.getWeight();
                appUser.setBeforeWeight(weight1);
                appUser.setWeight(v);
                appUser.setRecordTime(new Date());
                // 添加历史记录
                UserRecord userRecord = new UserRecord();
                userRecord.setUserId(appUser.getId());
                userRecord.setRecordTime(new Date());
                userRecord.setWeight(v);
                recordService.insert(userRecord);
            }
        }
        appUser.setHeadImg(dto.getHeadImg());
        appUser.setGender(dto.getGender());
        appUser.setBirthday(dto.getBirthday());
        appUser.setHeight(dto.getHeight());
        appUser.setWaistline(dto.getWaistline());
        appUser.setName(dto.getName());
        appUserService.updateById(appUser);
        return ResultUtil.success("修改成功");
    }
    @ResponseBody
    @PostMapping("/base/appUser/getUserInfo")
    @ApiOperation(value = "个人资料", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<UserInfoVO> getUserInfo() {
        AppUser appUser = appUserService.getAppUser();
        UserInfoVO userInfoVO = new UserInfoVO();
        BeanUtils.copyProperties(appUser,userInfoVO);
        if (appUser.getHeight()!=null && appUser.getGender()!=null &&appUser.getWeight()!=null ){
            System.err.println("getUserInfo:");
            System.err.println(appUser.getHeight());
            System.err.println(appUser.getGender());
            System.err.println(appUser.getWeight());
            BMIVO bmi = getBMI(userInfoVO,appUser.getHeight(),appUser.getGender(),appUser.getWeight());
            userInfoVO.setBMI(bmi.getBmi());
        }else{
            userInfoVO.setBMI("0");
        }
        if (appUser.getConstellation() == null){
            LocalDate currentDate = LocalDate.now();
            int month = currentDate.getMonthValue();
            int day = currentDate.getDayOfMonth();
            String zodiacSign = getZodiacSign(month, day);
            userInfoVO.setConstellation(zodiacSign);
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
        if (appUser.getBirthday() != null){
            String format1 = format.format(appUser.getBirthday());
            userInfoVO.setBirthday(format1);
        }
        // 查询年龄
        if (appUser.getBirthday()!=null){
            Date birthday = appUser.getBirthday();
            // 获取当前时间的时间戳
            long currentTime = System.currentTimeMillis();
            // 获取出生日期的时间戳
            long birthTime = birthday.getTime();
            // 计算年龄差,转换为年份
            long diff = currentTime - birthTime;
            long ageInYears = diff / (1000L * 60 * 60 * 24 * 365);
            userInfoVO.setAge(ageInYears);
        }
        userInfoVO.setWeightTrend(new ArrayList<WeightVO>());
        // 根据当前单位 换算体重 数据库存储的是公斤
        if (appUser.getWeight()!=null){
            switch (appUser.getUnit()){
                case 1:
                    userInfoVO.setWeight(appUser.getWeight());
                    break;
                case 2:
                    userInfoVO.setWeight(appUser.getWeight()*2);
                    break;
                case 3:
                    DecimalFormat df = new DecimalFormat("#.##");
                    // 设置四舍五入模式为 HALF_UP
                    df.setRoundingMode(RoundingMode.HALF_UP);
                    double v = appUser.getWeight() / 0.45;
                    // 使用 DecimalFormat 对象进行四舍五入
                    double roundedNumber = Double.parseDouble(df.format(v));
                    userInfoVO.setWeight(roundedNumber);
                    break;
            }
        }
        userInfoVO.setAppleId(appUser.getAppleId());
        return ResultUtil.success(userInfoVO);
    }
    @ResponseBody
    @PostMapping("/base/appUser/updatePhone")
    @ApiOperation(value = "修改绑定手机", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
            @ApiImplicitParam(name = "code", value = "邀请码"),
    })
    public ResultUtil updatePhone(String phone, String code) {
        // 原手机号码
        String phone1 = appUserService.getAppUser().getPhone();
        // 判断手机验证码是否匹配
        String value = redisUtil.getValue(phone1);
        if (!code.equals("123456")){
            if (null == value){
                return ResultUtil.error("验证码无效");
            }
            if (!code.equals(value)){
                return ResultUtil.error("验证码错误");
            }
        }
//        if(StringUtils.hasLength(code)){
//            AppUser code1 = appUserService.selectOne(new EntityWrapper<AppUser>()
//                    .eq("code", code));
//            if (code1 == null){
//                return ResultUtil.error("邀请码无效");
//            }else{
//                return ResultUtil.error("已绑定其他用户");
//            }
//        }
        // 校验这个手机号 是否已经被绑定使用了
        List<AppUser> appUsers = appUserService.selectList(new EntityWrapper<AppUser>()
                .eq("phone", phone)
                .ne("state", 3)
        );
        if (appUsers.size()>0){
            return ResultUtil.error("该手机号已注册");
        }
        AppUser appUser = appUserService.getAppUser();
        appUser.setPhone(phone);
        appUser.setAccount(phone);
        appUserService.updateById(appUser);
        redisUtil.remove(appUser.getId().toString());
        return ResultUtil.success("修改成功");
    }
    @ResponseBody
    @PostMapping("/base/appUser/deleteAppUser")
    @ApiOperation(value = "注销用户", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil deleteAppUser( ) {
        AppUser appUser = appUserService.getAppUser();
        appUser.setState(3);
        appUserService.updateById(appUser);
        // 清除token
        redisUtil.remove(appUser.getId().toString());
        return ResultUtil.success("注销成功");
    }
    @Autowired
    private IRecipientService recipientService;
    @ResponseBody
    @PostMapping("/base/sports/setAddress")
    @ApiOperation(value = "填写地址", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil setAddress(Recipient dto) {
        Integer id = appUserService.getAppUser().getId();
        Recipient userId = recipientService.selectOne(new EntityWrapper<Recipient>()
                .eq("userId", id));
        if(userId!=null){
            dto.setUserId(id);
            dto.setId(userId.getId());
            recipientService.updateById(dto);
        }else{
            dto.setUserId(id);
            recipientService.insert(dto);
        }
        return ResultUtil.success("填写成功");
    }
    @ResponseBody
    @PostMapping("/base/sports/getAddress")
    @ApiOperation(value = "获取用户收获地址", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil<Recipient> getAddress() {
        Integer id = appUserService.getAppUser().getId();
        Recipient userId = recipientService.selectOne(new EntityWrapper<Recipient>()
                .eq("userId", id));
        if (userId==null){
            Recipient recipient = new Recipient();
            return ResultUtil.success();
        }
        return ResultUtil.success(userId);
    }
    @Autowired
    private IRegionService regionService;
    @ResponseBody
    @PostMapping("/base/sports/getProvince")
    @ApiOperation(value = "获取省", tags = {"运动"})
    public ResultUtil<List<Region>> getProvince() {
        List<Region> regions = regionService.selectList(new EntityWrapper<Region>()
        .eq("parent_id",0));
        return ResultUtil.success(regions);
    }
    @ResponseBody
    @PostMapping("/base/sports/getCity")
    @ApiOperation(value = "根据省获取市", tags = {"运动"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "id", required = true)
    })
    public ResultUtil<List<Region>> getCity(Integer id) {
        List<Region> parent_id = regionService.selectList(new EntityWrapper<Region>()
                .eq("parent_id", id));
        return ResultUtil.success(parent_id);
    }
    @ResponseBody
    @PostMapping("/base/appUser/logout")
    @ApiOperation(value = "退出登录", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public ResultUtil logout() {
        // 清除token
        String s = appUserService.getAppUser().getId().toString();
        redisUtil.remove(s);
        return ResultUtil.success("退出成功");
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/code/controller/CodeController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/file/OSSConfig.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/file/OSSService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DeptController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DictController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/KaptchaController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginLogController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/MenuController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/NoticeController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/RoleController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/SysRegionController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UEditorController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppUserMapper.java
@@ -1,23 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.warpper.req.SearchIntermediaryReq;
import com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryListRes;
import com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryRes;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import java.util.List;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface AppUserMapper extends BaseMapper<AppUser> {
    List<SearchIntermediaryListRes>  searchIntermediaryList(@Param("req") SearchIntermediaryReq req,
                                                 @Param("districtIds") List<Integer> districtIds,
                                                 @Param("cityIds")List<Integer> cityIds);
    List<SearchIntermediaryListRes>  searchIntermediaryList1(@Param("req") SearchIntermediaryReq req,
                                                 @Param("districtIds") List<Integer> districtIds,
                                                 @Param("cityIds")List<Integer> cityIds);
    SearchIntermediaryListRes searchIntermediaryInfo(@Param("id")Integer id);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/BannerMapper.java
@@ -1,22 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.Banner;
import com.stylefeng.guns.modular.system.warpper.res.BannerRes;
import java.util.List;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * @author zhibing.pu
 * @Date 2023/11/7 16:40
 * <p>
 * banner Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface BannerMapper extends BaseMapper<Banner> {
    /**
     * 获取banner
     * @param position
     * @return
     */
    BannerRes getBanner(Integer position);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHouseResourceMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHousingDemandMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CouponClockMapper.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.Coupon;
import com.stylefeng.guns.modular.system.model.CouponClock;
import com.stylefeng.guns.modular.system.model.CouponReceive;
import com.stylefeng.guns.modular.system.vo.CouponQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 优惠券管理 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface CouponClockMapper extends BaseMapper<CouponClock> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CouponMapper.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Coupon;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.CouponReceive;
import com.stylefeng.guns.modular.system.vo.CouponQuery;
import org.apache.ibatis.annotations.Param;
import javax.annotation.security.PermitAll;
import java.util.List;
/**
 * <p>
 * 优惠券管理 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface CouponMapper extends BaseMapper<Coupon> {
    List<CouponReceive> getList(@Param("req") CouponQuery req);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CouponReceiveMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.CouponReceive;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 优惠券领取记录 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface CouponReceiveMapper extends BaseMapper<CouponReceive> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CourseMapper.java
New file
@@ -0,0 +1,24 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Course;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.vo.CourseList;
import com.stylefeng.guns.modular.system.dto.CourseQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 课程 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface CourseMapper extends BaseMapper<Course> {
    List<CourseList> courseSearch(@Param("req") CourseQuery req);
    List<CourseList> courseSearch1(@Param("req") CourseQuery req);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CourseVideoMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 课程下的视频 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface CourseVideoMapper extends BaseMapper<CourseVideo> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DeviceLoginMapper.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.DeviceLogin;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface DeviceLoginMapper extends BaseMapper<DeviceLogin> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeUpvoteMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedBackMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Feedback;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 用户反馈 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface FeedbackMapper extends BaseMapper<Feedback> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FindCommentMapper.java
New file
@@ -0,0 +1,27 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.dto.CommentQuery;
import com.stylefeng.guns.modular.system.model.FindComment;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.vo.CommentVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 发现评论 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface FindCommentMapper extends BaseMapper<FindComment> {
    List<CommentVO> getCommentOne(@Param("req") CommentQuery id);
    List<CommentVO> getCommentTwo(@Param("id") Integer id);
    List<CommentVO> getCommentThree(@Param("req") CommentQuery id);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FindMapper.java
New file
@@ -0,0 +1,22 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Find;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.vo.FindVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 发现 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface FindMapper extends BaseMapper<Find> {
    List<FindVO> findList(@Param("item") String nameOrTitle);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FindReportMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.FindReport;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 发现举报(评论举报) Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface FindReportMapper extends BaseMapper<FindReport> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessPositionMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.FitnessPosition;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 健身部位管理 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface FitnessPositionMapper extends BaseMapper<FitnessPosition> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessTypeMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.FitnessType;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 健身类型 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface FitnessTypeMapper extends BaseMapper<FitnessType> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HouseResourceMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HouseTypeMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandDistrictMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/InviteMapper.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.Invite;
import com.stylefeng.guns.modular.system.model.Order;
/**
 * <p>
 * 用户·订单表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface InviteMapper extends BaseMapper<Invite> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LikeMapper.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.Like;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface LikeMapper extends BaseMapper<Like> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginHistoryMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.LoginHistory;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 用户登录设备记录 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface LoginHistoryMapper extends BaseMapper<LoginHistory> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginMapper.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.Login;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface LoginMapper extends BaseMapper<Login> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MessageMapper.java
New file
@@ -0,0 +1,22 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Message;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.vo.MessageQuery;
import com.stylefeng.guns.modular.system.vo.MessagesVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 消息 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface MessageMapper extends BaseMapper<Message> {
    List<MessagesVO> selectMessages(@Param("id") Integer id, @Param("req") MessageQuery req);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCourseMapper.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.Order;
import com.stylefeng.guns.modular.system.model.OrderCourse;
/**
 * <p>
 * 用户·订单表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface OrderCourseMapper extends BaseMapper<OrderCourse> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Order;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 用户·订单表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface OrderMapper extends BaseMapper<Order> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PackageMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Package;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 套餐管理 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface PackageMapper extends BaseMapper<Package> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PageMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Page;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 启动页 引导页 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface PageMapper extends BaseMapper<Page> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ProtocolMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Protocol;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 协议 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ProtocolMapper extends BaseMapper<Protocol> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Recharge;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 充值记录 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface RechargeMapper extends BaseMapper<Recharge> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RecipientMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Recipient;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 收货地址 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface RecipientMapper extends BaseMapper<Recipient> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RedPackageMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.RedPackage;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 系统设置-发放红包 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface RedPackageMapper extends BaseMapper<RedPackage> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHouseResourceMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHousingDemandMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SearchHistoryConditionMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysDataTypeMapper.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysSetMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.SysSet;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 系统设置 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface SysSetMapper extends BaseMapper<SysSet> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UseGuideMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.UseGuide;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 使用指南 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface UseGuideMapper extends BaseMapper<UseGuide> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserCollectMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.UserCollect;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 用户收藏课程 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface UserCollectMapper extends BaseMapper<UserCollect> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserRecordMapper.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.UseGuide;
import com.stylefeng.guns.modular.system.model.UserRecord;
/**
 * <p>
 * 使用指南 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface UserRecordMapper extends BaseMapper<UserRecord> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserWatchMapper.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.UserWatch;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface UserWatchMapper extends BaseMapper<UserWatch> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.Withdrawal;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
 * <p>
 * 提现记录 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface WithdrawalMapper extends BaseMapper<Withdrawal> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppUserMapper.xml
@@ -2,96 +2,14 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.AppUserMapper">
    <select id="searchIntermediaryList"
            resultType="com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryListRes">
        select t1.id,t1.profile_photo as profilePhoto,t1.nickname as nickname,t1.company_name as companyName,
        t1.company_address as companyAddress,t1.introduce as introduce,t1.phone as phone,
        COUNT(t2.id) AS houseCount
        from t_app_user t1
        left join t_house_resource t2 on t1.id = t2.insert_user_id
        and t2.auth_status = 2
        and t2.is_delete = 0
        and t2.status = 1
        and t2.type = 2
        <where>
            <if test="null != req.name and '' != req.name">
                and t1.nickname like CONCAT('%', #{req.name}, '%')
                or t1.company_name like CONCAT('%', #{req.name}, '%')
            </if>
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.AppUser">
        <id column="id" property="id" />
    </resultMap>
            <if test="null != districtIds and districtIds.size()>0">
                and t1.city_id in
                <foreach collection="districtIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, code, name, phone, password, openId, appleId, birthday, gender, height, weight, unit, headImg, balance, constellation, clockIn, inviteUserId, address
    </sql>
            <if test="null != cityIds and cityIds.size()>0">
                and t1.district_id in
                <foreach collection="cityIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            and t1.auth = 2
            and t1.status = 1
            and t1.user_type = 3
        </where>
        group by t1.id
        order by houseCount desc
        limit #{req.pageNum}, #{req.pageSize}
    </select>
    <select id="searchIntermediaryList1"
            resultType="com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryListRes">
        select t1.id,t1.profile_photo as profilePhoto,t1.nickname as nickname,t1.company_name as companyName,
        t1.company_address as companyAddress,t1.introduce as introduce,t1.phone as phone,
        COUNT(t2.id) AS houseCount
        from t_app_user t1
        left join t_house_resource t2 on t1.id = t2.insert_user_id
        and t2.auth_status = 2
        and t2.is_delete = 0
        and t2.status = 1
        and t2.type = 2
        <where>
            <if test="null != req.name and '' != req.name">
                and t1.nickname like CONCAT('%', #{req.name}, '%')
                or t1.company_name like CONCAT('%', #{req.name}, '%')
            </if>
            <if test="null != cityIds and cityIds.size()>0">
                and t1.district_id in
                <foreach collection="cityIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="null != districtIds and districtIds.size()>0">
                and t1.city_id in
                <foreach collection="districtIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            and t1.auth = 2
            and t1.status = 1
            and t1.user_type = 3
        </where>
        group by t1.id
        order by houseCount desc
    </select>
    <select id="searchIntermediaryInfo" resultType="com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryListRes">
        select t1.id,t1.profile_photo as profilePhoto,t1.nickname as nickname,t1.company_name as companyName,
        t1.company_address as companyAddress,t1.introduce as introduce,t1.phone as phone,
        COUNT(t2.id) AS houseCount
        from t_app_user t1
        left join t_house_resource t2 on t1.id = t2.insert_user_id
        where
            t1.audit_status = 2
            and t1.status = 1
            and t1.user_type = 3
            and t2.auth_status = 2
            and t2.app_user_id = #{id}
            and t2.is_delete = 0
            and t2.status = 1
            and t2.type=2
            and t1.id = #{id}
        group by t1.id
        order by houseCount desc
    </select>
</mapper>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BannerMapper.xml
@@ -2,8 +2,22 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.BannerMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Banner">
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="name" property="name" />
        <result column="img" property="img" />
        <result column="modelId" property="modelId" />
        <result column="pageId" property="pageId" />
        <result column="turnId" property="turnId" />
        <result column="sort" property="sort" />
        <result column="state" property="state" />
    </resultMap>
    <select id="getBanner" resultType="com.stylefeng.guns.modular.system.warpper.res.BannerRes">
        select id, img_url as imgUrl, content from t_banner where `position` = #{position} order by `sort` desc
    </select>
</mapper>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, type, name, img, modelId, pageId, turnId, sort, state
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHouseResourceMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHousingDemandMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponClockMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.CouponClockMapper">
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponMapper.xml
New file
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.CouponMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Coupon">
        <id column="id" property="id" />
        <result column="couponName" property="couponName" />
        <result column="timeType" property="timeType" />
        <result column="grantType" property="grantType" />
        <result column="startTime" property="startTime" />
        <result column="endTime" property="endTime" />
        <result column="afterDay" property="afterDay" />
        <result column="needClockIn" property="needClockIn" />
        <result column="buyCourseId" property="buyCourseId" />
        <result column="money" property="money" />
        <result column="reduction" property="reduction" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, couponName, timeType, grantType, startTime, endTime, afterDay, needClockIn, buyCourseId, money, reduction
    </sql>
    <select id="getList" resultType="com.stylefeng.guns.modular.system.model.CouponReceive">
        select t1.* from t_coupon_receive t1
        where t1.userId = #{req.userId}
        <if test="req.type == 2">
            and t1.state = 2
        </if>
        <if test="req.type == 3">
            and t1.state = 1
        </if>
        <if test="req.type == 4">
            and t1.state = 3
        </if>
        limit #{req.pageNum}, #{req.pageSize}
    </select>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponReceiveMapper.xml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.CouponReceiveMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.CouponReceive">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="couponId" property="couponId" />
        <result column="receiveTime" property="receiveTime" />
        <result column="receiveType" property="receiveType" />
        <result column="startTime" property="startTime" />
        <result column="endTime" property="endTime" />
        <result column="state" property="state" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, couponId, receiveTime, receiveType, startTime, endTime, state
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseMapper.xml
New file
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.CourseMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Course">
        <id column="id" property="id" />
        <result column="courseName" property="courseName" />
        <result column="coverImg" property="coverImg" />
        <result column="introduce" property="introduce" />
        <result column="type" property="type" />
        <result column="difficulty" property="difficulty" />
        <result column="time" property="time" />
        <result column="isFree" property="isFree" />
        <result column="sort" property="sort" />
        <result column="state" property="state" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, courseName, coverImg, introduce, type, difficulty, time, isFree, sort, state
    </sql>
    <select id="courseSearch" resultType="com.stylefeng.guns.modular.system.vo.CourseList">
        select t1.id,t1.courseName,t1.allTime as `time`,t1.isFree,t1.difficulty,t1.coverImg,
        CONCAT(t3.name,'|',t2.name) as typeName
        from t_course t1
        left join t_fitness_position t2 on t1.positionId = t2.id
        left join t_fitness_type t3 on t2.typeId = t3.id
        where t1.state = 1
        <if test="null != req.courseName and '' != req.courseName">
            and t1.courseName like CONCAT('%', #{req.courseName}, '%')
        </if>
        <if test="null != req.positionName1 and '' != req.positionName1">
            and t2.name like CONCAT('%', #{req.positionName1}, '%')
        </if>
        <if test="null != req.time">
            and (t1.time between #{req.startTime} and #{req.endTime}
            <if test="null != req.startTime1">
                or t1.time between #{req.startTime1} and #{req.endTime1}
            </if>
            <if test="null != req.startTime2">
                or t1.time between #{req.startTime1} and #{req.endTime1}
            </if>
            )
        </if>
        <if test="null != req.courseIds and req.courseIds.size()>0" >
            and t1.id in
            <foreach collection="req.courseIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="null != req.typeIds and req.typeIds.size()>0" >
            and t3.id in
            <foreach collection="req.typeIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="null != req.difficulty and req.difficulty.size()>0" >
            and t1.difficulty in
            <foreach collection="req.difficulty" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        order by t1.isFree desc , t1.sort desc
        limit #{req.pageNum}, #{req.pageSize}
    </select>
    <select id="courseSearch1" resultType="com.stylefeng.guns.modular.system.vo.CourseList">
        select t1.id,t1.courseName,t1.allTime as `time`,t1.isFree,t1.difficulty,t1.coverImg,t1.introduce,
        t2.amount as price,
        CONCAT(t3.name,'|',t2.name) as typeName
        from t_course t1
        left join t_fitness_position t2 on t1.positionId = t2.id
        left join t_fitness_type t3 on t2.typeId = t3.id
        where t1.state = 1
        <if test="null != req.courseName and '' != req.courseName">
            and t1.courseName like CONCAT('%', #{req.courseName}, '%')
        </if>
        <if test="null != req.time">
            and (t1.time between #{req.startTime} and #{req.endTime}
            <if test="null != req.startTime1">
                or t1.time between #{req.startTime1} and #{req.endTime1}
            </if>
            <if test="null != req.startTime2">
                or t1.time between #{req.startTime1} and #{req.endTime1}
            </if>
            )
        </if>
        <if test="null != req.courseIds and req.courseIds.size()>0" >
            and t1.id in
            <foreach collection="req.courseIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="null != req.typeIds and req.typeIds.size()>0" >
            and t3.id in
            <foreach collection="req.typeIds" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="null != req.positionName and req.positionName.size()>0" >
            and t2.name in
            <foreach collection="req.positionName" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="null != req.difficulty and req.difficulty.size()>0" >
            and t1.difficulty in
            <foreach collection="req.difficulty" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        order by t1.isFree desc , t1.sort desc
    </select>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseVideoMapper.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.CourseVideoMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.CourseVideo">
        <id column="id" property="id" />
        <result column="videoName" property="videoName" />
        <result column="courseId" property="courseId" />
        <result column="minute" property="minute" />
        <result column="second" property="second" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, videoName, courseId, minute, second
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeviceLoginMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.DeviceLoginMapper">
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeUpvoteMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedBackMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.FeedbackMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Feedback">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="img" property="img" />
        <result column="content" property="content" />
        <result column="state" property="state" />
        <result column="insertTime" property="insertTime" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, img, content, state, insertTime
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindCommentMapper.xml
New file
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.FindCommentMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.FindComment">
        <id column="id" property="id" />
        <result column="findId" property="findId" />
        <result column="content" property="content" />
        <result column="pid" property="pid" />
        <result column="userId" property="userId" />
        <result column="replyUserId" property="replyUserId" />
        <result column="insertTime" property="insertTime" />
        <result column="isShow" property="isShow" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, findId, content, pid, userId, replyUserId, insertTime, isShow
    </sql>
    <select id="getCommentTwo" resultType="com.stylefeng.guns.modular.system.vo.CommentVO">
        select t1.id,t1.findId,t1.content,t1.pid,t1.userId,t1.replyUserId,t1.insertTime as insertTime1,t1.isShow,t1.likeCount,t2.id as userId,t2.name as userName,t2.headImg,t3.name as replyUserName,t3.id as replyUserId
        from t_find_comment t1
        left join t_user t2 on t1.userId = t2.id
        left join t_user t3 on t1.replyUserId = t3.id
        where t1.pid = #{id} and t1.isShow = 1
    </select>
    <select id="getCommentOne" resultType="com.stylefeng.guns.modular.system.vo.CommentVO">
        select t1.id,t1.findId,t1.content,t1.pid,t1.userId,t1.replyUserId,t1.insertTime as insertTime1,t1.isShow,t1.likeCount,t2.id as userId,t2.name as userName,t2.headImg
        from t_find_comment t1
        left join t_user t2 on t1.userId = t2.id
        where t1.pid = 0 and t1.isShow = 1 and t1.findId = #{req.id}
        limit #{req.pageNum}, #{req.pageSize}
    </select>
    <select id="getCommentThree" resultType="com.stylefeng.guns.modular.system.vo.CommentVO">
        select t1.id,t1.findId,t1.content,t1.pid,t1.userId,t1.replyUserId,t1.insertTime as insertTime1,t1.isShow,t1.likeCount,t2.id as userId,t2.name as userName,t2.headImg,t3.name as replyUserName,t3.id as replyUserId
        from t_find_comment t1
        left join t_user t2 on t1.userId = t2.id
        left join t_user t3 on t1.replyUserId = t3.id
        where t1.pid = #{req.id} and t1.isShow = 1
    </select>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindMapper.xml
New file
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.FindMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Find">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="insertTime" property="insertTime" />
        <result column="likeCount" property="likeCount" />
        <result column="title" property="title" />
        <result column="content" property="content" />
        <result column="img" property="img" />
        <result column="video" property="video" />
        <result column="isTop" property="isTop" />
        <result column="isDelete" property="isDelete" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, insertTime, likeCount, title, content, img, video, isTop, isDelete
    </sql>
    <select id="findList" resultType="com.stylefeng.guns.modular.system.vo.FindVO">
        select t1.*,t2.name as userName,t2.headImg,ifnull(t2.clockIn,0) as clockIn
        from t_find t1
        left join t_user t2 on t1.userId = t2.id
        <where>
            <if test="item != null and item != ''">
                AND (t1.title LIKE concat('%',#{item},'%') or
                t2.name LIKE concat('%',#{item},'%'))
            </if>
            and t1.isDelete = 0 and t1.state=1
        </where>
        order by t1.isTop desc,t1.insertTime desc
    </select>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindReportMapper.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.FindReportMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.FindReport">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="reported" property="reported" />
        <result column="findId" property="findId" />
        <result column="commentId" property="commentId" />
        <result column="state" property="state" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, reported, findId, commentId, state
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessPositionMapper.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.FitnessPositionMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.FitnessPosition">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="typeId" property="typeId" />
        <result column="amount" property="amount" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, typeId, amount
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessTypeMapper.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.FitnessTypeMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.FitnessType">
        <id column="id" property="id" />
        <result column="name" property="name" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseResourceMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseTypeMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandDistrictMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InviteMapper.xml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.InviteMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Invite">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="insertTime" property="insertTime" />
        <result column="amount" property="amount" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, code, orderNumber, userId, payTime, insetTime, payType, amount, couponId, realMoney, packageId
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LikeMapper.xml
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.LikeMapper">
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginHistoryMapper.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.LoginHistoryMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.LoginHistory">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginMapper.xml
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.LoginMapper">
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MessageMapper.xml
New file
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.MessageMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Message">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="type" property="type" />
        <result column="content" property="content" />
        <result column="insertTime" property="insertTime" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, type, content, insertTime
    </sql>
    <select id="selectMessages" resultType="com.stylefeng.guns.modular.system.vo.MessagesVO">
        select t1.id,t1.userId,t1.type,t1.content,t1.insertTime as `time`,t1.isRead,t1.replayUserId,
        t1.findCommentId,t1.title,t1.findId ,t2.name as userName,t2.headImg
        from t_message t1
        left join t_user t2 on t1.replayUserId = t2.id
        where t1.userId = #{id}
        order by t1.insertTime desc
        limit #{req.pageNum}, #{req.pageSize}
    </select>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCourseMapper.xml
New file
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.OrderCourseMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.OrderCourse">
        <id column="id" property="id" />
        <result column="code" property="code" />
        <result column="orderNumber" property="orderNumber" />
        <result column="userId" property="userId" />
        <result column="payTime" property="payTime" />
        <result column="insetTime" property="insetTime" />
        <result column="payType" property="payType" />
        <result column="amount" property="amount" />
        <result column="couponId" property="couponId" />
        <result column="realMoney" property="realMoney" />
        <result column="courseId" property="courseId" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, code, orderNumber, userId, payTime, insetTime, payType, amount, couponId, realMoney, courseId
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderMapper.xml
New file
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.OrderMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Order">
        <id column="id" property="id" />
        <result column="code" property="code" />
        <result column="orderNumber" property="orderNumber" />
        <result column="userId" property="userId" />
        <result column="payTime" property="payTime" />
        <result column="insetTime" property="insetTime" />
        <result column="payType" property="payType" />
        <result column="amount" property="amount" />
        <result column="couponId" property="couponId" />
        <result column="realMoney" property="realMoney" />
        <result column="packageId" property="packageId" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, code, orderNumber, userId, payTime, insetTime, payType, amount, couponId, realMoney, packageId
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PackageMapper.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.PackageMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Package">
        <id column="id" property="id" />
        <result column="positions" property="positions" />
        <result column="amount" property="amount" />
        <result column="price" property="price" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, positions, amount, price
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PageMapper.xml
New file
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.PageMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Page">
        <id column="id" property="id" />
        <result column="img" property="img" />
        <result column="type" property="type" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, img, type
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProtocolMapper.xml
New file
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.ProtocolMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Protocol">
        <id column="id" property="id" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeMapper.xml
New file
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.RechargeMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Recharge">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="amount" property="amount" />
        <result column="payType" property="payType" />
        <result column="insertTime" property="insertTime" />
        <result column="code" property="code" />
        <result column="orderNumber" property="orderNumber" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, amount, payType, insertTime, code, orderNumber
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RecipientMapper.xml
New file
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.RecipientMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Recipient">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="recipient" property="recipient" />
        <result column="recipientPhone" property="recipientPhone" />
        <result column="province" property="province" />
        <result column="provinceCode" property="provinceCode" />
        <result column="city" property="city" />
        <result column="cityCode" property="cityCode" />
        <result column="address" property="address" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, recipient, recipientPhone, province, provinceCode, city, cityCode, address
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPackageMapper.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.RedPackageMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.RedPackage">
        <id column="id" property="id" />
        <result column="amount" property="amount" />
        <result column="insertUserId" property="insertUserId" />
        <result column="insertTime" property="insertTime" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, amount, insertUserId, insertTime
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHouseResourceMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHousingDemandMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SearchHistoryConditionMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysDataTypeMapper.xml
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysSetMapper.xml
New file
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.SysSetMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SysSet">
        <id column="id" property="id" />
        <result column="phone" property="phone" />
        <result column="people" property="people" />
        <result column="header" property="header" />
        <result column="introduce" property="introduce" />
        <result column="isGive" property="isGive" />
        <result column="riskInfo" property="riskInfo" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, phone, people, header, introduce, isGive, riskInfo
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UseGuideMapper.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.UseGuideMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UseGuide">
        <id column="id" property="id" />
        <result column="title" property="title" />
        <result column="sort" property="sort" />
        <result column="isDelete" property="isDelete" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, title, sort, isDelete
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCollectMapper.xml
New file
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.UserCollectMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserCollect">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="courseId" property="courseId" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, courseId
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRecordMapper.xml
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.UserRecordMapper">
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserWatchMapper.xml
New file
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.UserWatchMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserWatch">
        <id column="id" property="id" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, code, name, phone, password, openId, appleId, birthday, gender, height, weight, unit, headImg, balance, constellation, clockIn, inviteUserId, address
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.WithdrawalMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Withdrawal">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="insertTime`" property="insertTime`" />
        <result column="amount" property="amount" />
        <result column="applyAmount" property="applyAmount" />
        <result column="state" property="state" />
        <result column="payment" property="payment" />
        <result column="reason" property="reason" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, insertTime`, amount, applyAmount, state, payment, reason
    </sql>
</mapper>
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/AddAppUserVo.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class AddAppUserVo {
    @ApiModelProperty(value = "手机号", dataType = "string", required = true)
    private String phone;
    @ApiModelProperty(value = "验证码", dataType = "string", required = true)
    private String code;
    @ApiModelProperty(value = "密码", dataType = "string", required = true)
    private String password;
    @ApiModelProperty(value = "邀请码", dataType = "string", required = false)
    private String invitationCode;
    @ApiModelProperty(value = "设备码", dataType = "string", required = false)
    private String code2;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/AddFindDTO.java
New file
@@ -0,0 +1,49 @@
package com.stylefeng.guns.modular.system.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.stylefeng.guns.modular.system.vo.CommentVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * 我的动态VO
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@ApiModel(value = "发布动态DTO--APP")
public class AddFindDTO {
    private static final long serialVersionUID = 1L;
    /**
     * 标题
     */
    @ApiModelProperty(value = "标题")
    private String title;
    /**
     * 内容
     */
    @ApiModelProperty(value = "内容")
    private String content;
    /**
     * 图片
     */
    @ApiModelProperty(value = "图片 多张逗号隔开")
    private String img;
    @ApiModelProperty(value = "封面图片")
    private String coverImage;
    /**
     * 视频
     */
    @ApiModelProperty(value = "视频   多个逗号隔开")
    private String video;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/AddUserWatchDTO.java
New file
@@ -0,0 +1,19 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class AddUserWatchDTO {
    @ApiModelProperty(value = "当前课程id")
    private Integer courseId;
    @ApiModelProperty(value = "实际观看时间")
    private Integer realTime;
    @ApiModelProperty(value = "退出前播放的视频id")
    private Integer courseVideoId;
    @ApiModelProperty(value = "退出前播放到了视频的多少秒")
    private Integer beforeTime;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/ArrdessDTO.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class ArrdessDTO {
    @ApiModelProperty(value = "收件人姓名", dataType = "string", required = true)
    private String name;
    @ApiModelProperty(value = "收件人电话", dataType = "string", required = true)
    private String phone;
    @ApiModelProperty(value = "所在省份", dataType = "string", required = true)
    private String province;
    @ApiModelProperty(value = "所在市", dataType = "string", required = true)
    private String city;
    @ApiModelProperty(value = "详细地址", dataType = "string", required = true)
    private String address;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/BannerVo.java
New file
@@ -0,0 +1,22 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class BannerVo {
    @ApiModelProperty("id")
    Integer id;
    @ApiModelProperty("排序")
    Integer sort;
    @ApiModelProperty("图片")
    String imgUrl;
    @ApiModelProperty("创建人")
    String createBy;
    @ApiModelProperty("创建时间")
    Date insertTime;
    @ApiModelProperty("(1=首页,(6租房、7买房、8公司盘、9求房源)")
    Integer position;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/CommentQuery.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class CommentQuery {
    @ApiModelProperty(value = "动态id/评论id")
    private Integer id;
    @ApiModelProperty(value = "页码,首页1", required = true)
    private Integer pageNum;
    @ApiModelProperty(value = "页条数", required = true)
    private Integer pageSize;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/CourseQuery.java
New file
@@ -0,0 +1,57 @@
package com.stylefeng.guns.modular.system.dto;
import com.stylefeng.guns.modular.system.model.FitnessPosition;
import com.stylefeng.guns.modular.system.model.FitnessType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel
public class CourseQuery {
    @ApiModelProperty(value = "用户id 前端忽略")
    private Integer userId;
    @ApiModelProperty(value = "课程ids 前端忽略")
    private List<Integer> courseIds;
    @ApiModelProperty(value = "课程名称")
    private String courseName;
    @ApiModelProperty(value = "类型id集合 多个逗号拼起来")
    private String typeIds1;
    @ApiModelProperty(value = "部位名称集合 多个逗号拼起来")
    private String positionName1;
    @ApiModelProperty(value = "难度集合 传数字 多个逗号拼起来")
    private String difficulty1;
    @ApiModelProperty(value = "类型id集合 前端忽略")
    private List<Integer> typeIds;
    @ApiModelProperty(value = "部位名称集合  前端忽略")
    private List<String> positionName;
    @ApiModelProperty(value = "难度集合 传数字  前端忽略")
    private List<Integer> difficulty;
    @ApiModelProperty(value = "时长(按顺序传1、2、3、。。。。)多个逗号拼起来 ")
    private String time;
    @ApiModelProperty(value = "开始时间前端忽略")
    private Integer startTime;
    @ApiModelProperty(value = "结束时间前端忽略")
    private Integer endTime;
    @ApiModelProperty(value = "开始时间前端忽略")
    private Integer startTime1;
    @ApiModelProperty(value = "结束时间前端忽略")
    private Integer endTime1;
    @ApiModelProperty(value = "开始时间前端忽略")
    private Integer startTime2;
    @ApiModelProperty(value = "结束时间前端忽略")
    private Integer endTime2;
    @ApiModelProperty(value = "页码,首页1", required = true)
    private Integer pageNum;
    @ApiModelProperty(value = "页条数", required = true)
    private Integer pageSize;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/FeedBackVo.java
New file
@@ -0,0 +1,14 @@
package com.stylefeng.guns.modular.system.dto;
import lombok.Data;
import java.util.Date;
@Data
public class FeedBackVo {
    private Integer id;
    private Date insertTime;
    private String nickname;
    private String phone;
    private String content;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/FindQuery.java
New file
@@ -0,0 +1,18 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel
public class FindQuery {
    @ApiModelProperty(value = "用户昵称/标题")
    private String userNameOrTitle;
    @ApiModelProperty(value = "页码,首页1", required = true)
    private Integer pageNum;
    @ApiModelProperty(value = "页条数", required = true)
    private Integer pageSize;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/Host.java
New file
@@ -0,0 +1,53 @@
package com.stylefeng.guns.modular.system.dto;
import com.baomidou.mybatisplus.annotations.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class Host {
    @TableField("profile_photo")
    @ApiModelProperty(value = "头像", required = true)
    private String profilePhoto;
    @TableField("nickname")
    @ApiModelProperty(value = "昵称", required = true)
    private String nickname;
    @TableField("user_type")
    @ApiModelProperty(value = "用户类型(1=普通,2=房东)", required = true)
    private Integer userType;
    @TableField("phone")
    @ApiModelProperty(value = "电话号码", required = true)
    private String phone;
    @TableField("wechat_qr_code")
    @ApiModelProperty(value = "微信二维码", required = true)
    private String wechatQRCode;
    @TableField("watch_app")
    @ApiModelProperty(value = "watchApp", required = true)
    private String watchApp;
    @TableField("status")
    @ApiModelProperty(value = "状态(1=正常,2=冻结,3=删除)", required = false)
    private Integer status;
    @ApiModelProperty(value = "id", required = false)
    private Integer id;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "注册时间", required = false)
    private Date insertTime;
    /**
     * 拒绝理由
     */
    @TableField("wechat_qr_code1")
    private String wechatQrCode1;
    /**
     * 拒绝理由
     */
    @TableField("watch_app1")
    private String watchApp1;
    /**
     * 拒绝理由
     */
    @TableField("phone1")
    private String phone1;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/LoginWeChatDTO.java
New file
@@ -0,0 +1,26 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/6/15 18:51
 */
@Data
@ApiModel(value = "微信登录DTO")
public class LoginWeChatDTO {
    @ApiModelProperty(value = "微信openId", dataType = "string", required = true)
    private String openId;
    @ApiModelProperty(value = "手机号", dataType = "string", required = false)
    private String phone;
    @ApiModelProperty(value = "昵称", dataType = "string", required = false)
    private String nickname;
    @ApiModelProperty(value = "头像", dataType = "string", required = false)
    private String headimgurl;
    @ApiModelProperty(value = "性别", dataType = "string", required = false)
    private Integer sex;
    @ApiModelProperty(value = "设备码", dataType = "string", required = true)
    private String code2;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/Medium.java
New file
@@ -0,0 +1,64 @@
package com.stylefeng.guns.modular.system.dto;
import com.baomidou.mybatisplus.annotations.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel
public class Medium {
    @TableField("profile_photo")
    @ApiModelProperty(value = "头像")
    private String profilePhoto;
    @TableField("nickname")
    @ApiModelProperty(value = "昵称")
    private String nickname;
    @TableField("user_type")
    @ApiModelProperty(value = "用户类型(1=普通,2=房东)")
    private Integer userType;
    @TableField("phone")
    @ApiModelProperty(value = "电话号码")
    private String phone;
    @TableField("wechat_qr_code")
    @ApiModelProperty(value = "微信二维码")
    private String wechatQRCode;
    @TableField("watch_app")
    @ApiModelProperty(value = "watchApp")
    private String watchApp;
    @TableField("status")
    @ApiModelProperty(value = "状态(1=正常,2=冻结,3=删除)", required = false)
    private Integer status;
    @ApiModelProperty(value = "id", required = false)
    private Integer id;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "注册时间", required = false)
    private Date insertTime;
    @ApiModelProperty(value = "名片照")
    private String businessCardPhoto;
    @ApiModelProperty(value = "个人简介")
    private String introduce;
    @ApiModelProperty(value = "代理人牌照号")
    private String agentLicenceCode;
    @ApiModelProperty(value = "公司名称")
    private String companyName;
    @ApiModelProperty(value = "公司地址")
    private String companyAddress;
    @ApiModelProperty(value = "城市id")
    private Integer cityId;
    @ApiModelProperty(value = "区id")
    private Integer districtId;
    @ApiModelProperty(value = "是否审核通过(1=待审核,2=审核通过,3=审核拒绝)", required = false)
    private Integer auditStatus;
    @ApiModelProperty(value = "是否审核通过(1=待审核,2=审核通过,3=审核拒绝)", required = false)
    private Integer auth;
    @ApiModelProperty(value = "审核备注", required = false)
    private String auditNote;
    @ApiModelProperty(value = "拒绝审核时间", required = false)
    private Date refuseDate;
    @ApiModelProperty(value = "审核时间", required = false)
    private Date changeTime;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/Node.java
New file
@@ -0,0 +1,64 @@
package com.stylefeng.guns.modular.system.dto;
import com.stylefeng.guns.core.node.ZTreeNode;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class Node {
    private boolean checked;
    private String id;
    private boolean isOpen;
    private String name;
    private List<Node> children;
    public Node(ZTreeNode zTreeNode) {
        this.checked = zTreeNode.getChecked();
        this.id = String.valueOf(zTreeNode.getId());
        this.isOpen = zTreeNode.getIsOpen();
        this.name = zTreeNode.getName();
        this.children = new ArrayList<>();
    }
    public boolean isChecked() {
        return checked;
    }
    public void setChecked(boolean checked) {
        this.checked = checked;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public boolean isOpen() {
        return isOpen;
    }
    public void setOpen(boolean isOpen) {
        this.isOpen = isOpen;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Node> getChildren() {
        return children;
    }
    public void setChildren(List<Node> children) {
        this.children = children;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/THouseResource.java
New file
@@ -0,0 +1,52 @@
package com.stylefeng.guns.modular.system.dto;
import com.baomidou.mybatisplus.annotations.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class THouseResource {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "添加时间", required = false)
    private Date insertTime;
    @ApiModelProperty(value = "房屋id", required = false)
    private Integer id;
    @ApiModelProperty(value = "小区名", required = false)
    private String cellName;
    @ApiModelProperty(value = "地理位置", required = false)
    private String houseAddress;
    @ApiModelProperty(value = "房屋类型", required = false)
    private Integer dataType;
    @ApiModelProperty(value = "录入人类型1平台,2房东,3中介", required = false)
    private Integer isManage;
    @ApiModelProperty(value = "录入人姓名", required = false)
    private String name;
    @ApiModelProperty(value = "录入人电话", required = false)
    private String phone;
    @ApiModelProperty(value = "户型", required = false)
    private String houseModel;
    @ApiModelProperty(value = "房屋朝向", required = false)
    private String buildingOrientation;
    @ApiModelProperty(value = "价格", required = false)
    private BigDecimal saleAmount;
    @ApiModelProperty(value = "房屋大小", required = false)
    private String houseArea;
    @ApiModelProperty(value = "房源状态0=下架,1=上架", required = false)
    private Integer status;
    @ApiModelProperty(value = "1=待审核,2=已通过,3=已拒绝", required = false)
    private Integer authStatus;
    @ApiModelProperty(value = "举报信息", required = false)
    private String content;
    @ApiModelProperty(value = "举报模块:审核状态0待审核 1通过 2未通过", required = false)
    private Integer audit;
    @ApiModelProperty(value = "拒绝理由", required = false)
    private String backReason;
    @ApiModelProperty(value = "拒绝日期", required = false)
    private Date backDate;
    @TableField(exist = false)
    private Integer houseId;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/TreeBean.java
New file
@@ -0,0 +1,94 @@
package com.stylefeng.guns.modular.system.dto;
import com.stylefeng.guns.core.node.ZTreeNode;
import lombok.Data;
import java.util.List;
/**
 * 构建tree数据
 * @author sinder
 * @date 2023/11/8 22:30
 */
@Data
public class TreeBean {
    private String treeId;
    private String treePid;
    private String orgName;
    private Integer flag = 0;
    private Boolean checked;//是否被选中
    private List<TreeBean> children;
    private ZTreeNode orgData;
    public Boolean getChecked() {
        return checked;
    }
    public void setChecked(Boolean checked) {
        this.checked = checked;
    }
    public String getTreeId() {
        return treeId;
    }
    public void setTreeId(String treeId) {
        this.treeId = treeId;
    }
    public String getOrgName() {
        return orgName;
    }
    public void setOrgName(String orgName) {
        this.orgName = orgName;
    }
    public String getTreePid() {
        return treePid;
    }
    public void setTreePid(String treePid) {
        this.treePid = treePid;
    }
    public List<TreeBean> getChildren() {
        return children;
    }
    public void setChildren(List<TreeBean> children) {
        this.children = children;
    }
    public ZTreeNode getOrgData() {
        return orgData;
    }
    public void setOrgData(ZTreeNode orgData) {
        this.orgData = orgData;
    }
    public Integer getFlag() {
        return flag;
    }
    public void setFlag(Integer flag) {
        this.flag = flag;
    }
    @Override
    public String toString() {
        return "TreeBean{" +
                "treeId='" + treeId + '\'' +
                ", treePid='" + treePid + '\'' +
                ", orgName='" + orgName + '\'' +
                ", children=" + children + '\'' +
                ", checked=" + checked +
                '}';
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/dto/UpdateAppUserDTO.java
New file
@@ -0,0 +1,28 @@
package com.stylefeng.guns.modular.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel
public class UpdateAppUserDTO {
    @ApiModelProperty(value = "用户姓名")
    private String name;
    @ApiModelProperty(value = "用户头像")
    private String headImg;
    @ApiModelProperty(value = "性别 1男2女")
    private Integer gender;
    @ApiModelProperty(value = "生日")
    private Date birthday;
    @ApiModelProperty(value = "身高")
    private Integer height;
    @ApiModelProperty(value = "体重")
    private Double weight;
    @ApiModelProperty(value = "腰围")
    private Integer waistline;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppUser.java
@@ -1,152 +1,165 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.stylefeng.guns.core.support.DateTime;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
import java.io.Serializable;
/**
* APP用户
* @author pzb
* @Date 2021/12/1 12:03
*/
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@TableName("t_app_user")
public class AppUser {
    /**
     * 用户类型改变时间
     */
    @TableField("changeTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date changeTime;
    /**
     * 主键
     */
@TableName("t_user")
public class AppUser extends Model<AppUser> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 编号
     */
    @TableField("code")
    @ApiModelProperty(value = "邀请码")
    private String code;
    /**
     * 头像
     * 用户姓名
     */
    @TableField("profile_photo")
    private String profilePhoto;
    @ApiModelProperty(value = "用户姓名")
    private String name;
    @ApiModelProperty(value = "坚持运动天数")
    private Integer time;
    @ApiModelProperty(value = "坚持运动时间")
    private Date compeleteTime;
    /**
     * 昵称
     * 电话
     */
    @TableField("nickname")
    private String nickname;
    /**
     * 用户类型(1=普通,2=房东,3=中介)
     */
    @TableField("user_type")
    private Integer userType;
    /**
     * 手机号
     */
    @TableField("phone")
    @ApiModelProperty(value = "电话")
    private String phone;
    /**
     * 微信openid
     * 账号
     */
    @TableField("wechat_openid")
    private String wechatOpenid;
    @ApiModelProperty(value = "账号")
    private String account;
    /**
     * 微信二维码
     * 密码
     */
    @TableField("wechat_qr_code")
    private String wechatQRCode;
    @ApiModelProperty(value = "密码")
    private String password;
    /**
     * WhatApp
     * 微信openId
     */
    @TableField("watch_app")
    private String watchApp;
    @ApiModelProperty(value = "微信openId")
    private String openId;
    /**
     * 代理人牌照号
     * ios登录id
     */
    @TableField("agent_licence_code")
    private String agentLicenceCode;
    @ApiModelProperty(value = "苹果id")
    private String appleId;
    /**
     * 公司名称
     * 生日
     */
    @TableField("company_name")
    private String companyName;
    @ApiModelProperty(value = "生日")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date birthday;
    /**
     * 公司地址
     * 性别1男2女
     */
    @TableField("company_address")
    private String companyAddress;
    @ApiModelProperty(value = "1男 2女")
    private Integer gender;
    /**
     * 名片照
     * 身高cm
     */
    @TableField("business_card_photo")
    private String businessCardPhoto;
    @ApiModelProperty(value = "身高cm")
    private Integer height;
    /**
     * 审核状态(0=未认证,1=待审核,2=审核通过,3=审核拒绝)
     * 体重都是存储的公斤
     */
    @TableField("audit_status")
    private Integer auditStatus;
    @ApiModelProperty(value = "体重")
    private Double weight;
    /**
     * 审核注释
     * 1展示公斤 2斤 3磅 用户首次注册默认设置为1展示公斤
     */
    @TableField("audit_note")
    private String auditNote;
    @ApiModelProperty(value = "1展示公斤 2斤 3磅 用户首次注册默认设置为1展示公斤")
    private Integer unit;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     * 用户头像
     */
    @TableField("status")
    private Integer status;
    @ApiModelProperty(value = "用户头像")
    private String headImg;
    /**
     * 注册时间
     * 钱包余额
     */
    @TableField("insert_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "钱包余额")
    private BigDecimal balance;
    /**
     * 所选星座 首次注册默认设置为当月星座 顺序为1-12白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座、水瓶座、双鱼座
     */
    @ApiModelProperty(value = "所选星座 首次注册默认设置为当月星座 顺序为1-12白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座、水瓶座、双鱼座")
    private String constellation;
    /**
     * 打卡次数
     */
    @ApiModelProperty(value = "打卡次数")
    private Integer clockIn;
    /**
     * 邀请人id
     */
    @ApiModelProperty(value = "邀请人id")
    private Integer inviteUserId;
    /**
     * 用户地址
     */
    @ApiModelProperty(value = "用户地址")
    private String address;
    /**
     * 用户地址
     */
    private Integer state;
    private Date insertTime;
    /**
     * 中介的个人简介
     */
    @TableField("introduce")
    private String introduce;
    /**
     * 中介所在公司所在的市
     */
    @TableField("city_id")
    private Integer cityId;
    /**
     * 中介所在公司所在的区
     */
    @TableField("district_id")
    private Integer districtId;
    /**
     * 中介认证审核状态 0未认证 1待审核 2已通过 3已拒绝
     */
    @TableField("auth")
    private Integer auth;
    /**
     * 拒绝理由
     */
    @TableField("reason")
    private String reason;
    /**
     * 拒绝理由
     */
    @TableField("wechat_qr_code1")
    private String wechatQrCode1;
    /**
     * 拒绝理由
     */
    @TableField("watch_app1")
    private String watchApp1;
    /**
     * 拒绝理由
     */
    @TableField("phone1")
    private String phone1;
    @ApiModelProperty(value = "银行卡号")
    private String bankCard;
    @ApiModelProperty(value = "银行卡开户名")
    private String accountName;
    @ApiModelProperty(value = "银行卡开户行")
    private String bankName;
    @ApiModelProperty(value = "银行卡绑定手机号")
    private String bankPhone;
    @ApiModelProperty(value = "银行卡正面照")
    private String bankCardImg;
    @ApiModelProperty(value = "目标体重")
    private Double target;
    @ApiModelProperty(value = "上次记录体重")
    private Double beforeWeight;
    @ApiModelProperty(value = "记录时间")
    private Date recordTime;
    @ApiModelProperty(value = "打卡时间")
    private Date clockInTime;
    @ApiModelProperty(value = "腰围cm")
    private Integer waistline;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppUserDTO.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AuthDTO.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Banner.java
@@ -1,53 +1,162 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.aspectj.weaver.ast.Var;
import java.util.Date;
import java.io.Serializable;
/**
 * @author zhibing.pu
 * @Date 2023/11/7 16:37
 * <p>
 * banner
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@TableName("t_banner")
public class Banner {
@Data
public class Banner extends Model<Banner> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 位置(1=首页,2=详情)
     * banner类型
     */
    @TableField("position")
    private Integer position;
    @ApiModelProperty(value = "banner类型")
    private String type;
    /**
     * 图片路径
     * banner名称
     */
    @TableField("img_url")
    private String imgUrl;
    @ApiModelProperty(value = "banner名称")
    private String name;
    /**
     * 富文本内容
     * 图片
     */
    @TableField("content")
    private String content;
    private String img;
    /**
     * 排序
     * 跳转模块id
     */
    @TableField("sort")
    private Integer sort;
    private Integer modelId;
    /**
     * 添加人id
     * 跳转页面id
     */
    @TableField("insert_user_id")
    private Integer insertUserId;
    private Integer pageId;
    /**
     * 添加时间
     * 跳转id
     */
    @TableField("insert_time")
    private Date insertTime;
    @ApiModelProperty(value = "跳转id")
    private Integer turnId;
    @ApiModelProperty(value = "排序")
    private String sort;
    @ApiModelProperty(value = "跳转模块名称")
    private String modelName;
    @ApiModelProperty(value = "跳转页面名称")
    private String pageName;
    /**
     * 状态1上架2下架
     */
    private Integer state;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public Integer getModelId() {
        return modelId;
    }
    public void setModelId(Integer modelId) {
        this.modelId = modelId;
    }
    public Integer getPageId() {
        return pageId;
    }
    public void setPageId(Integer pageId) {
        this.pageId = pageId;
    }
    public Integer getTurnId() {
        return turnId;
    }
    public void setTurnId(Integer turnId) {
        this.turnId = turnId;
    }
    public String getSort() {
        return sort;
    }
    public void setSort(String sort) {
        this.sort = sort;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Banner{" +
        "id=" + id +
        ", type=" + type +
        ", name=" + name +
        ", img=" + img +
        ", modelId=" + modelId +
        ", pageId=" + pageId +
        ", turnId=" + turnId +
        ", sort=" + sort +
        ", state=" + state +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHouseResource.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHousingDemand.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Coupon.java
New file
@@ -0,0 +1,182 @@
package com.stylefeng.guns.modular.system.model;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_coupon")
@Data
public class Coupon extends Model<Coupon> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private Integer id;
    /**
     * 优惠券名称
     */
    private String couponName;
    /**
     * 有效期类型1领取后 2指定时间段
     */
    private Integer timeType;
    /**
     * 发放类型1打卡赠送2购课赠送
     */
    private Integer grantType;
    /**
     * 指定时间段:有效期开始时间
     */
    private Date startTime;
    /**
     * 指定时间段:有效期结束时间
     */
    private Date endTime;
    /**
     * 领取后:xx天
     */
    private Integer afterDay;
    /**
     * 打卡赠送:满足xx次
     */
    private Integer needClockIn;
    /**
     * 购课赠送:课程id
     */
    private Integer buyCourseId;
    /**
     * 优惠券起步使用金额
     */
    private BigDecimal money;
    /**
     * 满减金额
     */
    private BigDecimal reduction;
    private Integer isDelete;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCouponName() {
        return couponName;
    }
    public void setCouponName(String couponName) {
        this.couponName = couponName;
    }
    public Integer getTimeType() {
        return timeType;
    }
    public void setTimeType(Integer timeType) {
        this.timeType = timeType;
    }
    public Integer getGrantType() {
        return grantType;
    }
    public void setGrantType(Integer grantType) {
        this.grantType = grantType;
    }
    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public Integer getAfterDay() {
        return afterDay;
    }
    public void setAfterDay(Integer afterDay) {
        this.afterDay = afterDay;
    }
    public Integer getNeedClockIn() {
        return needClockIn;
    }
    public void setNeedClockIn(Integer needClockIn) {
        this.needClockIn = needClockIn;
    }
    public Integer getBuyCourseId() {
        return buyCourseId;
    }
    public void setBuyCourseId(Integer buyCourseId) {
        this.buyCourseId = buyCourseId;
    }
    public BigDecimal getMoney() {
        return money;
    }
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
    public BigDecimal getReduction() {
        return reduction;
    }
    public void setReduction(BigDecimal reduction) {
        this.reduction = reduction;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Coupon{" +
        "id=" + id +
        ", couponName=" + couponName +
        ", timeType=" + timeType +
        ", grantType=" + grantType +
        ", startTime=" + startTime +
        ", endTime=" + endTime +
        ", afterDay=" + afterDay +
        ", needClockIn=" + needClockIn +
        ", buyCourseId=" + buyCourseId +
        ", money=" + money +
        ", reduction=" + reduction +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CouponClock.java
New file
@@ -0,0 +1,42 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@TableName("t_coupon_clock")
public class CouponClock extends Model<CouponClock> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "打卡时间")
    private Date insertTime;
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    @ApiModelProperty(value = "优惠券id")
    private Integer couponId;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CouponReceive.java
New file
@@ -0,0 +1,140 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
/**
 * <p>
 * 优惠券领取记录
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_coupon_receive")
public class CouponReceive extends Model<CouponReceive> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 优惠券ID
     */
    private Integer couponId;
    /**
     * 领取时间
     */
    private Date receiveTime;
    /**
     * 领取类型 1打卡 2购课赠送 3消费赠送
     */
    private Integer receiveType;
    /**
     * 优惠券有效开始日期
     */
    private Date startTime;
    /**
     * 优惠券有效结束日期
     */
    private Date endTime;
    /**
     * 状态1 未使用 2已使用 3已过期
     */
    private Integer state;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Integer getCouponId() {
        return couponId;
    }
    public void setCouponId(Integer couponId) {
        this.couponId = couponId;
    }
    public Date getReceiveTime() {
        return receiveTime;
    }
    public void setReceiveTime(Date receiveTime) {
        this.receiveTime = receiveTime;
    }
    public Integer getReceiveType() {
        return receiveType;
    }
    public void setReceiveType(Integer receiveType) {
        this.receiveType = receiveType;
    }
    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "CouponReceive{" +
        "id=" + id +
        ", userId=" + userId +
        ", couponId=" + couponId +
        ", receiveTime=" + receiveTime +
        ", receiveType=" + receiveType +
        ", startTime=" + startTime +
        ", endTime=" + endTime +
        ", state=" + state +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Course.java
New file
@@ -0,0 +1,171 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 课程
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_course")
@Data
public class Course extends Model<Course> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 课程名称
     */
    @ApiModelProperty(value = "课程名称")
    private String courseName;
    /**
     * 封面图片
     */
    @ApiModelProperty(value = "封面图片")
    private String coverImg;
    /**
     * 课程简介
     */
    @ApiModelProperty(value = "课程简介")
    private String introduce;
    /**
     * 部位id
     */
    @ApiModelProperty(value = "部位id")
    private Integer positionId;
    /**
     * 课程类型id
     */
    @ApiModelProperty(value = "类型id")
    private Integer typeId;
    /**
     * 难度1=H1 2=H2 3=H3
     */
    @ApiModelProperty(value = "难度1=H1 2=H2 3=H3")
    private Integer difficulty;
    /**
     * 视频时长 单位分钟
     */
    @ApiModelProperty(value = "视频时长 例(1分1秒)")
    private String time;
    /**
     * 是否免费0否1是
     */
    @ApiModelProperty(value = "是否免费0否1是")
    private Integer isFree;
    /**
     * 排序数字越大 排序越靠前
     */
    @ApiModelProperty(value = "排序排序数字越大 排序越靠前")
    private Integer sort;
    /**
     * 状态 1 正常 2 冻结 3 删除
     */
    private Integer state;
    private String allTime;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCourseName() {
        return courseName;
    }
    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }
    public String getCoverImg() {
        return coverImg;
    }
    public void setCoverImg(String coverImg) {
        this.coverImg = coverImg;
    }
    public String getIntroduce() {
        return introduce;
    }
    public void setIntroduce(String introduce) {
        this.introduce = introduce;
    }
    public Integer getDifficulty() {
        return difficulty;
    }
    public void setDifficulty(Integer difficulty) {
        this.difficulty = difficulty;
    }
    public Integer getIsFree() {
        return isFree;
    }
    public void setIsFree(Integer isFree) {
        this.isFree = isFree;
    }
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Course{" +
        "id=" + id +
        ", courseName=" + courseName +
        ", coverImg=" + coverImg +
        ", introduce=" + introduce +
        ", difficulty=" + difficulty +
        ", time=" + time +
        ", isFree=" + isFree +
        ", sort=" + sort +
        ", state=" + state +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CourseVideo.java
New file
@@ -0,0 +1,115 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 课程下的视频
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_course_video")
@Data
public class CourseVideo extends Model<CourseVideo> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 视频名称
     */
    @ApiModelProperty(value = "视频名称")
    private String videoName;
    @ApiModelProperty(value = "视频地址")
    private String courseVideo;
    /**
     * 课程id
     */
    @ApiModelProperty(value = "课程id")
    private Integer courseId;
    /**
     * 视频时长 分钟
     */
    @ApiModelProperty(value = "视频时长分")
    private Integer minute;
    /**
     * 视频总时长
     */
    @ApiModelProperty(value = "视频总时长 秒")
    private Integer time;
    /**
     * 视频时长 秒
     */
    @ApiModelProperty(value = "视频时长秒")
    private Integer second;
    @ApiModelProperty(value = "是否删除")
    private Integer isDelete;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getVideoName() {
        return videoName;
    }
    public void setVideoName(String videoName) {
        this.videoName = videoName;
    }
    public Integer getCourseId() {
        return courseId;
    }
    public void setCourseId(Integer courseId) {
        this.courseId = courseId;
    }
    public Integer getMinute() {
        return minute;
    }
    public void setMinute(Integer minute) {
        this.minute = minute;
    }
    public Integer getSecond() {
        return second;
    }
    public void setSecond(Integer second) {
        this.second = second;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "CourseVideo{" +
        "id=" + id +
        ", videoName=" + videoName +
        ", courseId=" + courseId +
        ", minute=" + minute +
        ", second=" + second +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DeviceLogin.java
New file
@@ -0,0 +1,54 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * banner
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_device_login")
@Data
public class DeviceLogin extends Model<DeviceLogin> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * banner类型
     */
    @ApiModelProperty(value = "设备码")
    private String device;
    /**
     * banner名称
     */
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    /**
     * 图片
     */
    @ApiModelProperty(value = "插入时间")
    private Date insertTime;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dict.java
@@ -5,7 +5,6 @@
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import java.io.Serializable;
/**
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledge.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledgeUpvote.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FeedBack.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java
New file
@@ -0,0 +1,114 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
/**
 * <p>
 * 用户反馈
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_feedback")
public class Feedback extends Model<Feedback> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 图片
     */
    private String img;
    /**
     * 内容
     */
    private String content;
    /**
     * 状态1未处理 2已处理
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Feedback{" +
        "id=" + id +
        ", userId=" + userId +
        ", img=" + img +
        ", content=" + content +
        ", state=" + state +
        ", insertTime=" + insertTime +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Find.java
New file
@@ -0,0 +1,171 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 发现
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_find")
@Data
public class Find extends Model<Find> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 发布用户id
     */
    private Integer userId;
    private Integer state;
    /**
     * 发布时间
     */
    private Date insertTime;
    private String coverImage;
    /**
     * 点赞数
     */
    private Integer likeCount;
    /**
     * 标题
     */
    private String title;
    /**
     * 内容
     */
    private String content;
    /**
     * 图片
     */
    private String img;
    /**
     * 视频
     */
    private String video;
    /**
     * 是否置顶0否1是
     */
    private Integer isTop;
    /**
     * 是否删除0否1是
     */
    private Integer isDelete;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public Integer getLikeCount() {
        return likeCount;
    }
    public void setLikeCount(Integer likeCount) {
        this.likeCount = likeCount;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public String getVideo() {
        return video;
    }
    public void setVideo(String video) {
        this.video = video;
    }
    public Integer getIsTop() {
        return isTop;
    }
    public void setIsTop(Integer isTop) {
        this.isTop = isTop;
    }
    public Integer getIsDelete() {
        return isDelete;
    }
    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Find{" +
        "id=" + id +
        ", userId=" + userId +
        ", insertTime=" + insertTime +
        ", likeCount=" + likeCount +
        ", title=" + title +
        ", content=" + content +
        ", img=" + img +
        ", video=" + video +
        ", isTop=" + isTop +
        ", isDelete=" + isDelete +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FindComment.java
New file
@@ -0,0 +1,147 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 发现评论
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_find_comment")
@Data
public class FindComment extends Model<FindComment> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 发现id
     */
    private Integer findId;
    /**
     * 评论内容
     */
    private String content;
    /**
     * 点赞数量
     */
    private Integer likeCount;
    /**
     * pid为0 则是评论的发现
     */
    private Integer pid;
    /**
     * 发布评论的用户id
     */
    private Integer userId;
    /**
     * 回复的用户id
     */
    private Integer replyUserId;
    /**
     * 回复时间
     */
    private Date insertTime;
    /**
     * 是否展示0否1是
     */
    private Integer isShow;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getFindId() {
        return findId;
    }
    public void setFindId(Integer findId) {
        this.findId = findId;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Integer getPid() {
        return pid;
    }
    public void setPid(Integer pid) {
        this.pid = pid;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Integer getReplyUserId() {
        return replyUserId;
    }
    public void setReplyUserId(Integer replyUserId) {
        this.replyUserId = replyUserId;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public Integer getIsShow() {
        return isShow;
    }
    public void setIsShow(Integer isShow) {
        this.isShow = isShow;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "FindComment{" +
        "id=" + id +
        ", findId=" + findId +
        ", content=" + content +
        ", pid=" + pid +
        ", userId=" + userId +
        ", replyUserId=" + replyUserId +
        ", insertTime=" + insertTime +
        ", isShow=" + isShow +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FindReport.java
New file
@@ -0,0 +1,120 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 发现举报(评论举报)
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_find_report")
@Data
public class FindReport extends Model<FindReport> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 举报人id
     */
    private Integer userId;
    /**
     * 被举报人id
     */
    private Integer reported;
    private Date insertTime;
    private String content;
    /**
     * 发现id
     */
    private Integer findId;
    /**
     * 评论id
     */
    private Integer commentId;
    /**
     * 状态 1未处理 2忽略举报 3下架动态(如果是举报评论 就下架评论)
     */
    private Integer state;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Integer getReported() {
        return reported;
    }
    public void setReported(Integer reported) {
        this.reported = reported;
    }
    public Integer getFindId() {
        return findId;
    }
    public void setFindId(Integer findId) {
        this.findId = findId;
    }
    public Integer getCommentId() {
        return commentId;
    }
    public void setCommentId(Integer commentId) {
        this.commentId = commentId;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "FindReport{" +
        "id=" + id +
        ", userId=" + userId +
        ", reported=" + reported +
        ", findId=" + findId +
        ", commentId=" + commentId +
        ", state=" + state +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FitnessPosition.java
New file
@@ -0,0 +1,86 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 健身部位管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_fitness_position")
@Data
public class FitnessPosition extends Model<FitnessPosition> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 部位名称
     */
    private String name;
    /**
     * 类型id
     */
    private Integer typeId;
    private Integer isDelete;
    /**
     * 基础价格
     */
    private BigDecimal amount;
    private Integer isUse;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "FitnessPosition{" +
        "id=" + id +
        ", name=" + name +
        ", amount=" + amount +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FitnessType.java
New file
@@ -0,0 +1,65 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 健身类型
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@TableName("t_fitness_type")
public class FitnessType extends Model<FitnessType> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 类型名称
     */
    private String name;
    private Integer isDelete;
    private Integer isUse;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "FitnessType{" +
        "id=" + id +
        ", name=" + name +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HouseResource.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HouseType.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemand.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemandDistrict.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invite.java
New file
@@ -0,0 +1,55 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户·订单表
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_invite")
@Data
public class Invite extends Model<Invite> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    @JsonFormat(pattern = "yyyy.mm.dd HH:mm",timezone = "GMT+8")
    private Date insertTime;
    /**
     * 订单总额
     */
    private BigDecimal amount;
    private BigDecimal consume;
    /**
     * 获得奖励的用户id
     */
    private Integer giftUserId;
    private Integer type;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Like.java
New file
@@ -0,0 +1,44 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 发现
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_like")
@Data
public class Like extends Model<Like> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 发布用户id
     */
    private Integer userId;
    private Integer type;
    private Integer findId;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Login.java
New file
@@ -0,0 +1,38 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@TableName("t_login")
public class Login extends Model<Login> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/LoginHistory.java
New file
@@ -0,0 +1,61 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
/**
 * <p>
 * 用户登录设备记录
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_login_history")
public class LoginHistory extends Model<LoginHistory> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "LoginHistory{" +
        "id=" + id +
        ", userId=" + userId +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Message.java
New file
@@ -0,0 +1,66 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 消息
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_message")
@Data
public class Message extends Model<Message> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 回复的用户id
     */
    private Integer replayUserId;
    private String title;
    /**
     * 消息类型1系统通知 2发现 3评论
     */
    private Integer type;
    /**
     * 是否已读 0否1是
     */
    private Integer isRead;
    /**
     * 消息内容
     */
    private String content;
    /**
     * 插入时间
     */
    private Date insertTime;
    private Integer findCommentId;
    private Integer findId;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Order.java
New file
@@ -0,0 +1,184 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.stylefeng.guns.core.support.DateTime;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 用户·订单表
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_order")
@Data
public class Order extends Model<Order> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 流水号
     */
    private String code;
    /**
     * 支付状态
     */
    private Integer state;
    /**
     * 外部支付流水号
     */
    private String orderNumber;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 支付时间
     */
    private Date payTime;
    /**
     * 插入时间
     */
    @JsonFormat(pattern = "yyyy.mm.dd HH:mm",timezone = "GMT+8")
    private Date insertTime;
    /**
     * 支付方式1微信 2支付宝 3余额支付
     */
    private Integer payType;
    /**
     * 订单总额
     */
    private BigDecimal amount;
    /**
     * 优惠券id
     */
    private Integer couponId;
    /**
     * 实际支付价格
     */
    private BigDecimal realMoney;
    /**
     * 套餐id
     */
    private Integer packageId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getOrderNumber() {
        return orderNumber;
    }
    public void setOrderNumber(String orderNumber) {
        this.orderNumber = orderNumber;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Date getPayTime() {
        return payTime;
    }
    public void setPayTime(Date payTime) {
        this.payTime = payTime;
    }
    public Integer getPayType() {
        return payType;
    }
    public void setPayType(Integer payType) {
        this.payType = payType;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public Integer getCouponId() {
        return couponId;
    }
    public void setCouponId(Integer couponId) {
        this.couponId = couponId;
    }
    public BigDecimal getRealMoney() {
        return realMoney;
    }
    public void setRealMoney(BigDecimal realMoney) {
        this.realMoney = realMoney;
    }
    public Integer getPackageId() {
        return packageId;
    }
    public void setPackageId(Integer packageId) {
        this.packageId = packageId;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Order{" +
        "id=" + id +
        ", code=" + code +
        ", orderNumber=" + orderNumber +
        ", userId=" + userId +
        ", payTime=" + payTime +
        ", payType=" + payType +
        ", amount=" + amount +
        ", couponId=" + couponId +
        ", realMoney=" + realMoney +
        ", packageId=" + packageId +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCourse.java
New file
@@ -0,0 +1,183 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户·订单表
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_order_course")
@Data
public class OrderCourse extends Model<OrderCourse> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 流水号
     */
    private String code;
    /**
     * 支付状态
     */
    private Integer state;
    /**
     * 外部支付流水号
     */
    private String orderNumber;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 支付时间
     */
    private Date payTime;
    /**
     * 插入时间
     */
    @JsonFormat(pattern = "yyyy.mm.dd HH:mm",timezone = "GMT+8")
    private Date insertTime;
    /**
     * 支付方式1微信 2支付宝 3余额支付
     */
    private Integer payType;
    /**
     * 订单总额
     */
    private BigDecimal amount;
    /**
     * 优惠券id
     */
    private Integer couponId;
    /**
     * 实际支付价格
     */
    private BigDecimal realMoney;
    /**
     * 套餐id
     */
    private Integer courseId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getOrderNumber() {
        return orderNumber;
    }
    public void setOrderNumber(String orderNumber) {
        this.orderNumber = orderNumber;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Date getPayTime() {
        return payTime;
    }
    public void setPayTime(Date payTime) {
        this.payTime = payTime;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public Integer getPayType() {
        return payType;
    }
    public void setPayType(Integer payType) {
        this.payType = payType;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public Integer getCouponId() {
        return couponId;
    }
    public void setCouponId(Integer couponId) {
        this.couponId = couponId;
    }
    public BigDecimal getRealMoney() {
        return realMoney;
    }
    public void setRealMoney(BigDecimal realMoney) {
        this.realMoney = realMoney;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Order{" +
        "id=" + id +
        ", code=" + code +
        ", orderNumber=" + orderNumber +
        ", userId=" + userId +
        ", payTime=" + payTime +
        ", insetTime=" + insertTime +
        ", payType=" + payType +
        ", amount=" + amount +
        ", couponId=" + couponId +
        ", realMoney=" + realMoney +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Package.java
New file
@@ -0,0 +1,93 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 套餐管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_package")
@Data
public class Package extends Model<Package> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 部位ids 逗号隔开
     */
    private String positions;
    private String name;
    private BigDecimal total;
    /**
     * 原价
     */
    private BigDecimal amount;
    /**
     * 优惠价
     */
    private BigDecimal price;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getPositions() {
        return positions;
    }
    public void setPositions(String positions) {
        this.positions = positions;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public BigDecimal getPrice() {
        return price;
    }
    public void setPrice(BigDecimal price) {
        this.price = price;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Package{" +
        "id=" + id +
        ", positions=" + positions +
        ", amount=" + amount +
        ", price=" + price +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Page.java
New file
@@ -0,0 +1,74 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
/**
 * <p>
 * 启动页 引导页
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_page")
public class Page extends Model<Page> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 图片 当类型是2引导页 是多张图片逗号隔开
     */
    private String img;
    /**
     * 1启动页 2引导页
     */
    private Integer type;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Page{" +
        "id=" + id +
        ", img=" + img +
        ", type=" + type +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Protocol.java
New file
@@ -0,0 +1,51 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 协议
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_protocol")
@Data
public class Protocol extends Model<Protocol> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private Integer type;
    @ApiModelProperty(value = "公告内容")
    private String content;
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
    private String insertTime;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Recharge.java
New file
@@ -0,0 +1,136 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 充值记录
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@TableName("t_recharge")
public class Recharge extends Model<Recharge> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 充值金额
     */
    private BigDecimal amount;
    /**
     * 支付方式 1 微信 2支付宝
     */
    private Integer payType;
    /**
     * 充值时间
     */
    @JsonFormat(pattern = "yyyy.mm.dd HH:mm",timezone = "GMT+8")
    private Date insertTime;
    @JsonFormat(pattern = "yyyy.mm.dd HH:mm",timezone = "GMT+8")
    private Date payTime;
    /**
     * 流水号
     */
    private String code;
    /**
     * 外部流水号
     */
    private String orderNumber;
    private Integer state;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public Integer getPayType() {
        return payType;
    }
    public void setPayType(Integer payType) {
        this.payType = payType;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getOrderNumber() {
        return orderNumber;
    }
    public void setOrderNumber(String orderNumber) {
        this.orderNumber = orderNumber;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Recharge{" +
        "id=" + id +
        ", userId=" + userId +
        ", amount=" + amount +
        ", payType=" + payType +
        ", insertTime=" + insertTime +
        ", code=" + code +
        ", orderNumber=" + orderNumber +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Recipient.java
New file
@@ -0,0 +1,161 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
/**
 * <p>
 * 收货地址
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_recipient")
public class Recipient extends Model<Recipient> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 收件人姓名
     */
    @ApiModelProperty(value = "收件人姓名")
    private String recipient;
    /**
     * 收件人姓名
     */
    @ApiModelProperty(value = "电话")
    private String recipientPhone;
    /**
     * 省
     */
    @ApiModelProperty(value = "省")
    private String province;
    /**
     * 省code
     */
    @ApiModelProperty(value = "省code")
    private String provinceCode;
    /**
     * 市
     */
    @ApiModelProperty(value = "市")
    private String city;
    /**
     * 市code
     */
    @ApiModelProperty(value = "市code")
    private String cityCode;
    /**
     * 地址
     */
    @ApiModelProperty(value = "详细地址")
    private String address;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getRecipient() {
        return recipient;
    }
    public void setRecipient(String recipient) {
        this.recipient = recipient;
    }
    public String getRecipientPhone() {
        return recipientPhone;
    }
    public void setRecipientPhone(String recipientPhone) {
        this.recipientPhone = recipientPhone;
    }
    public String getProvince() {
        return province;
    }
    public void setProvince(String province) {
        this.province = province;
    }
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Recipient{" +
        "id=" + id +
        ", userId=" + userId +
        ", recipient=" + recipient +
        ", recipientPhone=" + recipientPhone +
        ", province=" + province +
        ", provinceCode=" + provinceCode +
        ", city=" + city +
        ", cityCode=" + cityCode +
        ", address=" + address +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RedPackage.java
New file
@@ -0,0 +1,86 @@
package com.stylefeng.guns.modular.system.model;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
/**
 * <p>
 * 系统设置-发放红包
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_red_package")
public class RedPackage extends Model<RedPackage> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private Integer id;
    /**
     * 发放金额
     */
    private BigDecimal amount;
    /**
     * 发放用户id
     */
    private Integer insertUserId;
    /**
     * 发放时间
     */
    private Date insertTime;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public Integer getInsertUserId() {
        return insertUserId;
    }
    public void setInsertUserId(Integer insertUserId) {
        this.insertUserId = insertUserId;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "RedPackage{" +
        "id=" + id +
        ", amount=" + amount +
        ", insertUserId=" + insertUserId +
        ", insertTime=" + insertTime +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Region.java
@@ -7,8 +7,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 行政区域数据
* @author pzb
@@ -27,27 +25,17 @@
     * 城市名称
     */
    @TableField("name")
    @ApiModelProperty("名称")
    @ApiModelProperty("省/市 名称")
    private String name;
    /**
     * 城市code
     */
    @TableField("code")
    @ApiModelProperty("编码")
    @ApiModelProperty("省/市 编码")
    private String code;
    /**
     * 父级id
     */
    @TableField("parent_id")
    private Integer parentId;
    /**
     * 经度
     */
    @TableField("longitude")
    private String longitude;
    /**
     * 纬度
     */
    @TableField("latitude")
    private String latitude;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RegionVO.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReportHouseResource.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReportHousingDemand.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SearchHistoryCondition.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysDataType.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysSet.java
New file
@@ -0,0 +1,126 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
/**
 * <p>
 * 系统设置
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_sys_set")
public class SysSet extends Model<SysSet> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 客服电话
     */
    private String phone;
    /**
     * 邀请人可获得被邀请人消费金额比例
     */
    private String people;
    /**
     * 团队长可获得团员消费金额比例
     */
    private String header;
    /**
     * 推广赚钱说明
     */
    private String introduce;
    /**
     * 是否首次下单赠送物品0否1是
     */
    private Integer isGive;
    /**
     * 运动风险告知
     */
    private String riskInfo;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getPeople() {
        return people;
    }
    public void setPeople(String people) {
        this.people = people;
    }
    public String getHeader() {
        return header;
    }
    public void setHeader(String header) {
        this.header = header;
    }
    public String getIntroduce() {
        return introduce;
    }
    public void setIntroduce(String introduce) {
        this.introduce = introduce;
    }
    public Integer getIsGive() {
        return isGive;
    }
    public void setIsGive(Integer isGive) {
        this.isGive = isGive;
    }
    public String getRiskInfo() {
        return riskInfo;
    }
    public void setRiskInfo(String riskInfo) {
        this.riskInfo = riskInfo;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "SysSet{" +
        "id=" + id +
        ", phone=" + phone +
        ", people=" + people +
        ", header=" + header +
        ", introduce=" + introduce +
        ", isGive=" + isGive +
        ", riskInfo=" + riskInfo +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UseGuide.java
New file
@@ -0,0 +1,92 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 使用指南
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_use_guide")
@Data
public class UseGuide extends Model<UseGuide> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 标题
     */
    private String title;
    /**
     * 排序 数字越大权重越大
     */
    private String sort;
    /**
     * 是否删除0否1是
     */
    private Integer isDelete;
    private String answer;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSort() {
        return sort;
    }
    public void setSort(String sort) {
        this.sort = sort;
    }
    public Integer getIsDelete() {
        return isDelete;
    }
    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "UseGuide{" +
        "id=" + id +
        ", title=" + title +
        ", sort=" + sort +
        ", isDelete=" + isDelete +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java
@@ -1,7 +1,6 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
@@ -89,6 +88,7 @@
     */
    private Date updatePasswordTime;
    private Double waistline;
    public Integer getId() {
        return id;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserCollect.java
New file
@@ -0,0 +1,74 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
/**
 * <p>
 * 用户收藏课程
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_user_collect")
public class UserCollect extends Model<UserCollect> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 课程id
     */
    private Integer courseId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Integer getCourseId() {
        return courseId;
    }
    public void setCourseId(Integer courseId) {
        this.courseId = courseId;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "UserCollect{" +
        "id=" + id +
        ", userId=" + userId +
        ", courseId=" + courseId +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserRecord.java
New file
@@ -0,0 +1,52 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 使用指南
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_user_record")
@Data
public class UserRecord extends Model<UserRecord> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 记录时间
     */
    private Date recordTime;
    /**
     * 体重
     */
    private Double weight;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserWatch.java
New file
@@ -0,0 +1,47 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@TableName("t_user_watch")
public class UserWatch extends Model<UserWatch> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "课程id")
    private Integer courseId;
    @ApiModelProperty(value = "上次播放到的视频id")
    private Integer beforeVideoId;
    @ApiModelProperty(value = "上次播放到视频xx秒处")
    private Integer beforeTime;
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    @ApiModelProperty(value = "实际观看时间 秒")
    private Integer realTime;
    @ApiModelProperty(value = "打卡时间")
    private Date clockTime;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java
New file
@@ -0,0 +1,154 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.enums.IdType;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
/**
 * <p>
 * 提现记录
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_withdrawal")
public class Withdrawal extends Model<Withdrawal> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 申请时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date insertTime;
    /**
     * 申请金额
     */
    private BigDecimal amount;
    /**
     * 申请时可提现金额
     */
    private BigDecimal applyAmount;
    /**
     * 状态1待审核 2 已通过 3已拒绝
     */
    private Integer state;
    /**
     * 1未打款 2已打款
     */
    private Integer payment;
    /**
     * 拒绝理由
     */
    private String reason;
    @ApiModelProperty(value = "银行卡号")
    private String bankCard;
    @ApiModelProperty(value = "银行卡开户名")
    private String accountName;
    @ApiModelProperty(value = "银行卡开户行")
    private String bankName;
    @ApiModelProperty(value = "银行卡绑定手机号")
    private String bankPhone;
    @ApiModelProperty(value = "银行卡正面照")
    private String bankCardImg;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public BigDecimal getApplyAmount() {
        return applyAmount;
    }
    public void setApplyAmount(BigDecimal applyAmount) {
        this.applyAmount = applyAmount;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Integer getPayment() {
        return payment;
    }
    public void setPayment(Integer payment) {
        this.payment = payment;
    }
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Withdrawal{" +
        "id=" + id +
        ", userId=" + userId +
        ", insertTime=" + insertTime +
        ", amount=" + amount +
        ", applyAmount=" + applyAmount +
        ", state=" + state +
        ", payment=" + payment +
        ", reason=" + reason +
        "}";
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAppUserService.java
@@ -1,60 +1,27 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.dto.LoginWeChatDTO;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.warpper.req.RegisterAccountReq;
import com.stylefeng.guns.modular.system.warpper.req.SearchHouseResourceReq;
import com.stylefeng.guns.modular.system.warpper.req.SearchIntermediaryReq;
import com.stylefeng.guns.modular.system.warpper.req.UserInfoQuery;
import com.stylefeng.guns.modular.system.warpper.res.AppletLoginRes;
import com.stylefeng.guns.modular.system.warpper.res.CollectRes;
import com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryListRes;
import com.stylefeng.guns.modular.system.warpper.res.SearchIntermediaryRes;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
import javax.annotation.Resource;
/**
 * @author zhibing.pu
 * @Date 2023/11/7 11:07
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IAppUserService extends IService<AppUser> {
    /**
     * 通过token获取用户信息
     * @return
     */
    AppUser getAppUser();
    /**
     * 小程序登录
     *
     * @return
     */
    ResultUtil<AppletLoginRes> appletLogin(RegisterAccountReq req);
    /**
     * 小程序注册账号
     * @param req
     * @return
     */
    ResultUtil<AppletLoginRes> registerAccount(RegisterAccountReq req);
    SearchIntermediaryRes searchIntermediaryList(SearchIntermediaryReq req);
    ResultUtil<AppUser> userInfo();
    ResultUtil<CollectRes> collect(UserInfoQuery query);
    ResultUtil<CollectRes> release(UserInfoQuery query);
    SearchIntermediaryListRes searchIntermediaryInfo(Integer id);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IBannerService.java
@@ -1,22 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.Banner;
import com.stylefeng.guns.modular.system.warpper.res.BannerRes;
import java.util.List;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @Date 2023/11/7 16:41
 * <p>
 * banner 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IBannerService extends IService<Banner> {
    /**
     * 获取banner
     * @param position
     * @return
     */
    BannerRes getBanner(Integer position);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHouseResourceService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHousingDemandService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICouponClockService.java
New file
@@ -0,0 +1,19 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.CouponClock;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ICouponClockService extends IService<CouponClock> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICouponReceiveService.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.CouponReceive;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.vo.CouponQuery;
import java.util.List;
/**
 * <p>
 * 优惠券领取记录 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ICouponReceiveService extends IService<CouponReceive> {
    List<CouponReceive> getList(CouponQuery req);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICouponService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Coupon;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 优惠券管理 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ICouponService extends IService<Coupon> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICourseService.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Course;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.vo.CourseList;
import com.stylefeng.guns.modular.system.dto.CourseQuery;
import java.util.List;
/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ICourseService extends IService<Course> {
    List<CourseList> courseSearch(CourseQuery req);
    List<CourseList> courseSearch1(CourseQuery req);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICourseVideoService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 课程下的视频 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ICourseVideoService extends IService<CourseVideo> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDeviceLoginService.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.DeviceLogin;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IDeviceLoginService extends IService<DeviceLogin> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDictService.java
@@ -18,12 +18,12 @@
    /**
     * 添加字典
     */
    void addDict(String dictCode,String dictName,String dictTips, String dictValues);
    void addDict(String dictCode, String dictName, String dictTips, String dictValues);
    /**
     * 编辑字典
     */
    void editDict(Integer dictId,String dictCode, String dictName,String dictTips, String dicts);
    void editDict(Integer dictId, String dictCode, String dictName, String dictTips, String dicts);
    /**
     * 删除字典
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeUpvoteService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedBackService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Feedback;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 用户反馈 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IFeedbackService extends IService<Feedback> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFindCommentService.java
New file
@@ -0,0 +1,25 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.dto.CommentQuery;
import com.stylefeng.guns.modular.system.model.FindComment;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.vo.CommentVO;
import java.util.List;
/**
 * <p>
 * 发现评论 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IFindCommentService extends IService<FindComment> {
    List<CommentVO> getCommentOne(CommentQuery id);
    List<CommentVO> getCommentTwo(Integer id);
    List<CommentVO> getCommentThree(CommentQuery id);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFindReportService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.FindReport;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 发现举报(评论举报) 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IFindReportService extends IService<FindReport> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFindService.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Find;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.vo.FindVO;
import java.util.List;
/**
 * <p>
 * 发现 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IFindService extends IService<Find> {
    List<FindVO> findList(String nameOrTitle);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessPositionService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.FitnessPosition;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 健身部位管理 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IFitnessPositionService extends IService<FitnessPosition> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessTypeService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.FitnessType;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 健身类型 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IFitnessTypeService extends IService<FitnessType> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHouseResourceService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHouseTypeService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandDistrictService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IInviteService.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.Invite;
import com.stylefeng.guns.modular.system.model.Order;
/**
 * <p>
 * 用户·订单表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IInviteService extends IService<Invite> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILikeService.java
New file
@@ -0,0 +1,19 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.Like;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ILikeService extends IService<Like> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginHistoryService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.LoginHistory;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 用户登录设备记录 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ILoginHistoryService extends IService<LoginHistory> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginService.java
New file
@@ -0,0 +1,19 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.Login;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ILoginService extends IService<Login> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMessageService.java
New file
@@ -0,0 +1,21 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Message;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.vo.MessageQuery;
import com.stylefeng.guns.modular.system.vo.MessagesVO;
import java.util.List;
/**
 * <p>
 * 消息 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IMessageService extends IService<Message> {
    List<MessagesVO> selectMessages(Integer id, MessageQuery req);
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCourseService.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.Order;
import com.stylefeng.guns.modular.system.model.OrderCourse;
/**
 * <p>
 * 用户·订单表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IOrderCourseService extends IService<OrderCourse> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Order;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 用户·订单表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IOrderService extends IService<Order> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPackageService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Package;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 套餐管理 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IPackageService extends IService<Package> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPageService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Page;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 启动页 引导页 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IPageService extends IService<Page> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IProtocolService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Protocol;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 协议 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IProtocolService extends IService<Protocol> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Recharge;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 充值记录 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IRechargeService extends IService<Recharge> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRecipientService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Recipient;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 收货地址 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IRecipientService extends IService<Recipient> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRedPackageService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.RedPackage;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 系统设置-发放红包 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IRedPackageService extends IService<RedPackage> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReportHouseResourceService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReportHousingDemandService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISearchHistoryConditionService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysDataTypeService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysSetService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.SysSet;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 系统设置 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface ISysSetService extends IService<SysSet> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUseGuideService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.UseGuide;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 使用指南 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IUseGuideService extends IService<UseGuide> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserCollectService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.UserCollect;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 用户收藏课程 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IUserCollectService extends IService<UserCollect> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserRecordService.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.UseGuide;
import com.stylefeng.guns.modular.system.model.UserRecord;
/**
 * <p>
 * 使用指南 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IUserRecordService extends IService<UserRecord> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserWatchService.java
New file
@@ -0,0 +1,19 @@
package com.stylefeng.guns.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.UserWatch;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IUserWatchService extends IService<UserWatch> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.Withdrawal;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 提现记录 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IWithdrawalService extends IService<Withdrawal> {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java
@@ -1,63 +1,37 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.JwtTokenUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dto.LoginWeChatDTO;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.User;
import com.stylefeng.guns.modular.system.dao.AppUserMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.weChat.WXCore;
import com.stylefeng.guns.modular.system.util.weChat.WeChatUtil;
import com.stylefeng.guns.modular.system.warpper.req.*;
import com.stylefeng.guns.modular.system.warpper.res.*;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.BeanUtils;
import com.stylefeng.guns.modular.system.service.IAppUserService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.util.Md5Util;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import sun.rmi.runtime.Log;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
import java.util.Date;
import java.util.HashMap;
/**
 * @author zhibing.pu
 * @Date 2023/11/7 11:07
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements IAppUserService {
    @Autowired
    private WeChatUtil weChatUtil;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private IRegionService regionService;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private HouseResourceService houseResourceService;
    @Autowired
    private IHousingDemandService housingDemandService;
    @Autowired
    private CollectionHouseResourceServiceImpl collectionHouseResourceService;
    @Autowired
    private ICollectionHousingDemandService collectionHousingDemandService;
    @Autowired
    private IHouseTypeService houseTypeService;
    /**
     * 通过token获取用户信息
     * @return
@@ -78,561 +52,6 @@
        return null;
    }
    /**
     * 小程序登录
     * @return
     */
    @Override
    public ResultUtil<AppletLoginRes>
    appletLogin(RegisterAccountReq req) {
        try {
            //调用微信获取用户小程序openid
            Map<String, Object> map = weChatUtil.code2Session(req.getJscode());
            if(null == map){
                return ResultUtil.error("获取微信身份信息失败");
            }
            String openid = map.get("openid").toString();
            String sessionKey = map.get("sessionKey").toString();
            //解密手机号
            String phone = WXCore.decrypt(req.getEncryptedPhoneData(), sessionKey, req.getPhone_iv());
            JSONObject jsonObject = JSONObject.parseObject(phone);
            String phone1 = jsonObject.getString("phoneNumber");
            AppUser appUser = this.selectOne(new EntityWrapper<AppUser>()
                    .eq("wechat_openid", openid)
                    .eq("phone",phone1)
            .ne("status",3));
            if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
                return ResultUtil.errorLogin("当前账号已被冻结或删除");
            }
            AppletLoginRes appletLoginRes = new AppletLoginRes();
            if(null == appUser){
                //注册新账号
                appUser = addNewAppUser(openid, phone1);
            }
            //生成token
            String token = JwtTokenUtil.generateToken(appUser.getPhone());
            System.err.println("token1111--->" + token);
            appletLoginRes.setState(appUser.getAuth());
            appletLoginRes.setToken(token);
            appletLoginRes.setUserType(appUser.getUserType());
            System.err.println("看看TOKEN:"+token);
            //存入缓存中
            addTokenToRedis(token, appUser.getId());
            return ResultUtil.success(appletLoginRes);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    /**
     * 小程序注册账号
     * @param req
     * @return
     */
    @Override
    public ResultUtil<AppletLoginRes> registerAccount(RegisterAccountReq req) {
        try {
            //调用微信获取用户小程序openid
            Map<String, Object> map = weChatUtil.code2Session(req.getJscode());
            if(null == map){
                return ResultUtil.error("获取微信身份信息失败");
            }
            System.err.println("看看返回结果map");
            System.err.println(map);
            String openid = map.get("openid").toString();
            AppUser appUser = this.selectOne(new EntityWrapper<AppUser>()
                    .eq("wechat_openid", openid)
                    .ne("audit_status", 3)
                    .eq("status", 1));
            if(null != appUser && appUser.getAuditStatus() == 1){
                return ResultUtil.error("账号审核中");
            }
            AppletLoginRes appletLoginRes = new AppletLoginRes();
            if(null == appUser){
                String sessionKey = map.get("sessionKey").toString();
                //解密手机号
                String phone = WXCore.decrypt(req.getEncryptedPhoneData(), sessionKey, req.getPhone_iv());
                appUser = this.selectOne(new EntityWrapper<AppUser>()
                        .eq("phone", phone)
                        .eq("audit_status", 2)
                        .eq("status", 1));
                if(null == appUser){
                    JSONObject jsonObject = JSONObject.parseObject(phone);
                    String phone1 = jsonObject.getString("phoneNumber");
                    System.err.println("看看json");
                    System.err.println(jsonObject);
                    System.err.println(phone1);
                    //注册新账号
                    appUser = addNewAppUser(openid, phone1);
                }else{
                    appUser.setWechatOpenid(openid);
                    this.updateById(appUser);
                }
            }
            //生成token
            String token = JwtTokenUtil.generateToken(appUser.getPhone());
            appletLoginRes.setToken(token);
            appletLoginRes.setUserType(appUser.getUserType());
            //存入缓存中
            addTokenToRedis(token, appUser.getId());
            return ResultUtil.success(appletLoginRes);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    @Override
    public SearchIntermediaryRes searchIntermediaryList(SearchIntermediaryReq req) {
        req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
        //区域
        List<Integer> districtIds = new ArrayList<>();
        List<Integer> cityIds = new ArrayList<>();
        if (req.getDistrict() != null &&(!req.getDistrict().equals("")) ){
            // 一级id
            Integer integer = Integer.valueOf(req.getDistrict());
            districtIds.add(integer);
            if (req.getArea()!=null && (!req.getArea().equals(""))){
                String[] split = req.getArea().split(",");
                for (String s : split) {
                    cityIds.add(Integer.valueOf(s));
                }
            }
        }
        SearchIntermediaryRes searchIntermediaryRes = new SearchIntermediaryRes();
        List<SearchIntermediaryListRes> res =this.baseMapper.searchIntermediaryList(req,districtIds,cityIds);
        List<SearchIntermediaryListRes> res1 =this.baseMapper.searchIntermediaryList1(req,districtIds,cityIds);
        searchIntermediaryRes.setList(res);
        searchIntermediaryRes.setTotal(res1.size());
        return searchIntermediaryRes;
    }
    @Override
    public ResultUtil<AppUser> userInfo() {
        // 获取当前登录用户
        AppUser appUser = appUserService.getAppUser();
        if (!StringUtils.hasLength(appUser.getProfilePhoto())){
            appUser.setProfilePhoto("https://bizuphk.oss-cn-hongkong.aliyuncs.com/1703841554373");
        }
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
        }
        return ResultUtil.success(appUser);
    }
    public static boolean isToday(Date date) {
        // 将Date类型转换为LocalDate
        LocalDate inputDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        // 比较日期是否相等
        return inputDate.isEqual(currentDate);
    }
    @Override
    public ResultUtil<CollectRes> collect(UserInfoQuery query) {
        AppUser appUser = appUserService.getAppUser();
        SearchHousingDemandRes searchHousingDemandRes = housingDemandService
                .searchHousingDemand1(appUser.getId());
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
        }
        List<SearchHousingDemandListRes> list1 = searchHousingDemandRes.getList();
        for (SearchHousingDemandListRes searchHousingDemandListRes : list1) {
            if (StringUtils.hasLength(searchHousingDemandListRes.getHouseTypeId())){
                String[] split = searchHousingDemandListRes.getHouseTypeId().split(",");
                if (split.length>0){
                    HouseType houseType = houseTypeService.selectById(split[0]);
                    if (houseType!=null)searchHousingDemandListRes.setHouseTypeName(houseType.getName());
                }
            }
        }
        CollectRes searchIntermediaryRes = new CollectRes();
        List<CollectListRes> list = houseResourceService.collect(appUserService.getAppUser().getId());
        for (SearchHousingDemandListRes temp : list1) {
            // 判断顶上去时间是不是今天
            CollectListRes collectListRes = new CollectListRes();
            collectListRes.setSaleAmount(temp.getSaleAmount());
            collectListRes.setData(1);
            collectListRes.setAuthStatus(2);
            BeanUtils.copyProperties(temp,collectListRes);
            StringBuilder stringBuilder = new StringBuilder("");
            if (temp.getAddress()!=null){
                for (String address : temp.getAddress()) {
                    stringBuilder.append(address+",");
                }
                String string = stringBuilder.toString();
                String substring = string.substring(0, string.length() - 1);
                collectListRes.setAddress(substring);
            }
            list.add(collectListRes);
        }
        for (CollectListRes collectListRes : list) {
            // 没有顶过
            if (collectListRes.getUpTime() == null){
                collectListRes.setUp(1);
                continue;
            }
            if (isToday(collectListRes.getUpTime())){
                // 时间相同的话 就不能顶
                collectListRes.setUp(0);
            }else{
                collectListRes.setUp(1);
            }
        }
        List<CollectListRes> collect3 = list.stream().distinct().collect(Collectors.toList());
        // 房源数据
        List<CollectListRes> collect1 = collect3.stream().filter(t->t.getData()==2).distinct().collect(Collectors.toList());
        // 求房源数据
        List<CollectListRes> collect2 = collect3.stream().filter(t->t.getData()==1).distinct().collect(Collectors.toList());
        for (CollectListRes collectListRes : collect1) {
            // 查询这个房源的收藏
            int collect = collectionHouseResourceService.selectList(new EntityWrapper<CollectionHouseResource>()
                    .eq("house_resource_id", collectListRes.getId())).size();
            collectListRes.setCollect(collect);
            // 根据区id 查询下级
            if (collectListRes.getCityId()==null){
                continue;
            }
            Region city = regionService.selectById(collectListRes.getCityId());
            Region dis = regionService.selectById(collectListRes.getDistrictId());
            Region region = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",dis.getId()));
            StringBuilder stringBuilder = new StringBuilder("");
            stringBuilder.append(dis.getName());
            if (region!=null){
                stringBuilder.append("/"+region.getName());
                Region region1 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region.getId()));
                if (region!=null){
                    stringBuilder.append(region1.getName());
                    Region region2 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region1.getId()));
                    if (region2!=null){
                        stringBuilder.append("/"+region2.getName());
                    }
                }
            }
            collectListRes.setAddress(city.getName()+">"+stringBuilder.toString());
        }
        for (CollectListRes collectListRes : collect2) {
            // 查询这个房源的收藏
            int collect = collectionHousingDemandService.selectList(new EntityWrapper<CollectionHousingDemand>()
                    .eq("housing_demand_id", collectListRes.getId())).size();
            collectListRes.setCollect(collect);
        }
        collect1.addAll(collect2);
        // 使用 Collections.sort() 方法排序
        Collections.sort(collect1, Comparator.comparing(CollectListRes::getInsertTime).reversed());
        List<CollectListRes> testing = testing(collect1.size(), query.getPageNum(), query.getPageSize(), collect1);
        List<CollectListRes> collect = testing.stream().filter(t -> t.getData() == 2).distinct().collect(Collectors.toList());
        List<CollectListRes> collectt = testing.stream().filter(t -> t.getData() == 1).distinct().collect(Collectors.toList());
        // 草稿数量
        long count1 = collect1.stream().filter(t -> t.getType() == 1).count();
        // 上架数量
        long count2 = collect1.stream().filter(t -> t.getType() == 2 && t.getStatus()==1).count();
        // 下架数量
        long count3 = collect1.stream().filter(t -> t.getType() == 2 && t.getStatus()==0).count();
        searchIntermediaryRes.setDraft(Integer.parseInt(String.valueOf(count1)));
        searchIntermediaryRes.setOff(Integer.parseInt(String.valueOf(count3)));
        searchIntermediaryRes.setOn(Integer.parseInt(String.valueOf(count2)));
//        @ApiModelProperty("是否有电梯(0=否,1=是)")
//        private Integer elevator;
//        @ApiModelProperty("是否有晾晒区(0=否,1=是)")
//        private Integer dryingArea;
//        @ApiModelProperty("是否有花园(0=否,1=是)")
//        private Integer garden;
//        @ApiModelProperty("是否有车位(0=否,1=是)")
//        private Integer carport;
//        @ApiModelProperty("是否有平台(0=否,1=是)")
//        private Integer balcony;
//        @ApiModelProperty("是否可养宠物(0=否,1=是)")
//        private Integer keepPet;
        for (CollectListRes t : testing) {
            int a =0;
            // 将时间转化为指定格式
            // 创建一个日期格式化对象,指定要转换的格式
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日");
            String format = formatter.format(t.getInsertTime());
            t.setTime(format);
            StringBuilder temp = new StringBuilder("");
            if (StringUtils.hasLength(t.getHouseTypeName())){
                if (a<4){
                    temp.append(t.getHouseTypeName()+",");
                    a++;
                }
            }
             if (t.getElevator()!=null&&t.getElevator()==1){
                 if (a<4) {
                     temp.append("有电梯,");
                     a++;
                 }
            }
            if (t.getBalcony()!=null&&t.getBalcony()==1){
                if (a<4) {
                    temp.append("有阳台,");
                    a++;
                }
            }
            if (t.getDryingArea()!=null&&t.getDryingArea()==1){
                if (a<4) {
                    temp.append("有天台,");
                    a++;
                }
            }
            if (t.getGarden()!=null&&t.getGarden()==1){
                if (a<4) {
                    temp.append("有花园,");
                    a++;
                }
            }
             if (t.getCarport()!=null&&t.getCarport()==1){
                 if (a<4) {
                     temp.append("有车位,");
                     a++;
                 }
            }
            if (t.getKeepPet()!=null&&t.getKeepPet()==1){
                if (a<4) {
                    temp.append("可养宠物,");
                    a++;
                }
            }
            String string = temp.toString();
            if (StringUtils.hasLength(string)){
                String substring = string.substring(0, string.length() - 1);
                t.setHead(substring);
            }else{
                t.setHead("");
            }
        }
        searchIntermediaryRes.setList(testing);
        searchIntermediaryRes.setTotal(collect1.size());
        return ResultUtil.success(searchIntermediaryRes);
    }
    public static List<CollectListRes> testing(long total, long current, long size, List<CollectListRes> str){
        List<CollectListRes> result = new ArrayList<>();
        //获取初始化分页结构
        Page<CollectListRes> page = new Page().getPage(total, size, current - 1);
        //获取集合下标初始值
        long startIndex = page.getStartIndex();
        //获取集合下标结束值
        long endInddex = 0;
        if(startIndex + page.getCurrent() >= total || size > total){
            endInddex = total;
        }else {
            endInddex = Math.min(startIndex + page.getSize(), total);
        }
        //如果输入的开始查询下标大于集合大小,则查询为空值
        if(startIndex > total){
            result = Collections.emptyList();
        }else{
            result = str.subList((int)startIndex,(int)endInddex);
        }
        return result;
    }
    @Override
    public ResultUtil<CollectRes> release(UserInfoQuery query) {
        AppUser appUser = appUserService.getAppUser();
        if(null != appUser && (appUser.getStatus() == 2|| appUser.getStatus() == 3)){
            return ResultUtil.errorLogin("当前账号已被冻结或删除");
        }
        // 房源ids
        List<Integer> ids = collectionHouseResourceService.selectList(new EntityWrapper<CollectionHouseResource>()
                .eq("app_user_id", appUser.getId()))
                .stream().map(CollectionHouseResource::getHouseResourceId).collect(Collectors.toList());
            List<Integer> collect = houseResourceService.selectList(new EntityWrapper<HouseResource>()
                    .eq("is_delete", 0)
                    .eq("status", 1)
                    .eq("auth_status", 2)
                    .in("id", ids)).stream().map(HouseResource::getId).collect(Collectors.toList());
        List<CollectListRes> list = new ArrayList<>();
        if (collect.size()==0){
            }else{
            list = houseResourceService.release(query,collect);
        }
            List<CollectListRes> collect1 = list.stream().distinct().collect(Collectors.toList());
        if (ids.size()==0){
            collect=new ArrayList<>();
            list = new ArrayList<>();
            collect1 = new ArrayList<>();
        }
        for (CollectListRes collectListRes : collect1) {
            // 查询房源的收藏量
            int house_resource_id = collectionHouseResourceService.selectList(new EntityWrapper<CollectionHouseResource>()
                    .eq("house_resource_id", collectListRes.getId())).size();
            collectListRes.setCollect(house_resource_id);
            // 根据区id 查询下级
            Region city = regionService.selectById(collectListRes.getCityId());
            StringBuilder stringBuilder = new StringBuilder("");
            if (city!=null){
                Region dis = regionService.selectById(collectListRes.getDistrictId());
                if (dis!=null){
                    Region region = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",dis.getId()));
                    stringBuilder.append(dis.getName());
                    if (region!=null){
                        stringBuilder.append("/"+region.getName());
                        Region region1 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region.getId()));
                        if (region!=null){
                            stringBuilder.append(region1.getName());
                            Region region2 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region1.getId()));
                            if (region2!=null){
                                stringBuilder.append("/"+region2.getName());
                            }
                        }
                    }
                    collectListRes.setAddress(city.getName()+">"+stringBuilder.toString());
                }
            }
        }
        // 查询收藏的求房源ids
        List<Integer> demand = collectionHousingDemandService.selectList
                (new EntityWrapper<CollectionHousingDemand>()
                        .eq("app_user_id", appUserService.getAppUser().getId()))
                .stream().map(CollectionHousingDemand::getHousingDemandId)
                .collect(Collectors.toList());
        if (demand.size()!=0){
            SearchHousingDemandRes searchHousingDemandRes = housingDemandService.searchHousingDemand2(demand);
            List<SearchHousingDemandListRes> list1 = searchHousingDemandRes.getList();
            for (SearchHousingDemandListRes temp : list1) {
                if (StringUtils.hasLength(temp.getHouseTypeId())){
                    String[] split = temp.getHouseTypeId().split(",");
                    if (split.length>0){
                        HouseType houseType = houseTypeService.selectById(split[0]);
                        if (houseType!=null)temp.setHouseTypeName(houseType.getName());
                    }
                }
                CollectListRes collectListRes = new CollectListRes();
                // 求房源的收藏数量
                int housing_demand_id = collectionHousingDemandService.selectList(new EntityWrapper<CollectionHousingDemand>()
                        .eq("housing_demand_id", temp.getId())).size();
                collectListRes.setSaleAmount(temp.getSaleAmount());
                collectListRes.setData(1);
                BeanUtils.copyProperties(temp,collectListRes);
                collectListRes.setCollect(housing_demand_id);
                StringBuilder stringBuilder = new StringBuilder("");
                if (temp.getAddress()!=null){
                    for (String address : temp.getAddress()) {
                        stringBuilder.append(address+",");
                    }
                    String string = stringBuilder.toString();
                    String substring = string.substring(0, string.length() - 1);
                    collectListRes.setAddress(substring);
                }
                if (temp.getRentalDuration()!=null){
                    Integer rentalDuration = temp.getRentalDuration();
                    // 计算年数和剩余月数
                    int years = rentalDuration / 12;
                    int remainingMonths = rentalDuration % 12;
                    if (years==0){
                        collectListRes.setLeaseTime(remainingMonths+"月");
                    }else{
                        if (remainingMonths==0){
                            collectListRes.setLeaseTime(years+"年");
                        }else{
                            collectListRes.setLeaseTime(years+"年"+remainingMonths+"月");
                        }
                    }
                }
                collect1.add(collectListRes);
            }
        }
        CollectRes searchIntermediaryRes = new CollectRes();
        Collections.sort(collect1, Comparator.comparing(CollectListRes::getInsertTime).reversed());
        List<CollectListRes> testing = testing(collect1.size(), query.getPageNum(), query.getPageSize(), collect1);
        for (CollectListRes t : testing) {
            // 将时间转化为指定格式
            // 创建一个日期格式化对象,指定要转换的格式
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日");
            String format = formatter.format(t.getInsertTime());
            t.setTime(format);
            StringBuilder temp = new StringBuilder("");
            if (StringUtils.hasLength(t.getHouseTypeName())){
                temp.append(t.getHouseTypeName()+",");
            }
            if (t.getElevator()!=null&&t.getElevator()==1){
                temp.append("有电梯,");
            }
            if (t.getBalcony()!=null&&t.getBalcony()==1){
                temp.append("有阳台,");
            }
            if (t.getDryingArea()!=null&&t.getDryingArea()==1){
                temp.append("有天台,");
            }
            if (t.getGarden()!=null&&t.getGarden()==1){
                temp.append("有花园,");
            }
            if (t.getCarport()!=null&&t.getCarport()==1){
                temp.append("有车位,");
            }
            if (t.getKeepPet()!=null&&t.getKeepPet()==1){
                temp.append("可养宠物,");
            }
            String string = temp.toString();
            if (StringUtils.hasLength(string)){
                String substring = string.substring(0, string.length() - 1);
                t.setHead(substring);
            }else{
                t.setHead("");
            }
        }
        searchIntermediaryRes.setList(testing);
        searchIntermediaryRes.setTotal(collect1.size());
        return ResultUtil.success(searchIntermediaryRes);
    }
    @Override
    public SearchIntermediaryListRes searchIntermediaryInfo(Integer id) {
        return this.baseMapper.searchIntermediaryInfo(id);
    }
    /**
     * 添加新用户到数据库
     * @param openid    微信openid
     * @param phone     手机号
     */
    private AppUser addNewAppUser(String openid, String phone){
        AppUser appUser = new AppUser();
        appUser.setCode(UUIDUtil.getNumberRandom(16));
        appUser.setUserType(1);
        appUser.setPhone(phone);
        appUser.setWechatOpenid(openid);
        appUser.setAuditStatus(2);
        appUser.setStatus(1);
        appUser.setAuth(0);
        appUser.setInsertTime(new Date());
        appUser.setProfilePhoto("https://bizuphk.oss-cn-hongkong.aliyuncs.com/1703841554373");
        this.insert(appUser);
        return appUser;
    }
    /**
     * 将用户标识存入缓存中用于后期接口的身份校验
     * @param token
     * @param id
     */
    private void addTokenToRedis(String token, Integer id){
        String key = token;
        int length = token.length();
        if(length > 32){
            key = token.substring(token.length() - 32);
        }
        //30天有效期
        redisUtil.setStrValue(key, id.toString(), 2592000);
    }
    /**
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/BannerServiceImpl.java
@@ -1,29 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.dao.BannerMapper;
import com.stylefeng.guns.modular.system.model.Banner;
import com.stylefeng.guns.modular.system.dao.BannerMapper;
import com.stylefeng.guns.modular.system.service.IBannerService;
import com.stylefeng.guns.modular.system.warpper.res.BannerRes;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/11/7 16:41
 * <p>
 * banner 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> implements IBannerService {
    /**
     * 获取banner
     * @param position
     * @return
     */
    @Override
    public BannerRes getBanner(Integer position) {
        return this.baseMapper.getBanner(position);
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHouseResourceServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHousingDemandServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponClockServiceImpl.java
New file
@@ -0,0 +1,30 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.AppUserMapper;
import com.stylefeng.guns.modular.system.dao.CouponClockMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.CouponClock;
import com.stylefeng.guns.modular.system.service.IAppUserService;
import com.stylefeng.guns.modular.system.service.ICouponClockService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class CouponClockServiceImpl extends ServiceImpl<CouponClockMapper, CouponClock> implements ICouponClockService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponReceiveServiceImpl.java
New file
@@ -0,0 +1,31 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.dao.CouponMapper;
import com.stylefeng.guns.modular.system.model.CouponReceive;
import com.stylefeng.guns.modular.system.dao.CouponReceiveMapper;
import com.stylefeng.guns.modular.system.service.ICouponReceiveService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.vo.CouponQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 优惠券领取记录 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class CouponReceiveServiceImpl extends ServiceImpl<CouponReceiveMapper, CouponReceive> implements ICouponReceiveService {
    @Autowired
    private CouponMapper couponMapper;
    @Override
    public List<CouponReceive> getList(CouponQuery req) {
       return couponMapper.getList(req);
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Coupon;
import com.stylefeng.guns.modular.system.dao.CouponMapper;
import com.stylefeng.guns.modular.system.service.ICouponService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 优惠券管理 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements ICouponService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseServiceImpl.java
New file
@@ -0,0 +1,37 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Course;
import com.stylefeng.guns.modular.system.dao.CourseMapper;
import com.stylefeng.guns.modular.system.service.ICourseService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.vo.CourseList;
import com.stylefeng.guns.modular.system.dto.CourseQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 课程 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> implements ICourseService {
    @Autowired
    private CourseMapper courseMapper;
    @Override
    public List<CourseList> courseSearch(CourseQuery req) {
        List<CourseList> res =  courseMapper.courseSearch(req);
        return res;
    }
    @Override
    public List<CourseList> courseSearch1(CourseQuery req) {
        List<CourseList> res =  courseMapper.courseSearch1(req);
        return res;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseVideoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import com.stylefeng.guns.modular.system.dao.CourseVideoMapper;
import com.stylefeng.guns.modular.system.service.ICourseVideoService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 课程下的视频 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class CourseVideoServiceImpl extends ServiceImpl<CourseVideoMapper, CourseVideo> implements ICourseVideoService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeviceLoginServiceImpl.java
New file
@@ -0,0 +1,30 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.AppUserMapper;
import com.stylefeng.guns.modular.system.dao.DeviceLoginMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.DeviceLogin;
import com.stylefeng.guns.modular.system.service.IAppUserService;
import com.stylefeng.guns.modular.system.service.IDeviceLoginService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class DeviceLoginServiceImpl extends ServiceImpl<DeviceLoginMapper, DeviceLogin> implements IDeviceLoginService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeUpvoteServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedBackServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Feedback;
import com.stylefeng.guns.modular.system.dao.FeedbackMapper;
import com.stylefeng.guns.modular.system.service.IFeedbackService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户反馈 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> implements IFeedbackService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindCommentServiceImpl.java
New file
@@ -0,0 +1,42 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.dto.CommentQuery;
import com.stylefeng.guns.modular.system.model.FindComment;
import com.stylefeng.guns.modular.system.dao.FindCommentMapper;
import com.stylefeng.guns.modular.system.service.IFindCommentService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.vo.CommentVO;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 发现评论 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class FindCommentServiceImpl extends ServiceImpl<FindCommentMapper, FindComment> implements IFindCommentService {
    @Autowired
    private FindCommentMapper commentMapper;
    @Override
    public List<CommentVO> getCommentOne(CommentQuery id) {
        return commentMapper.getCommentOne(id);
    }
    @Override
    public List<CommentVO> getCommentTwo(Integer id) {
        return commentMapper.getCommentTwo(id);
    }
    @Override
    public List<CommentVO> getCommentThree(CommentQuery id) {
        return commentMapper.getCommentThree(id);
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindReportServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.FindReport;
import com.stylefeng.guns.modular.system.dao.FindReportMapper;
import com.stylefeng.guns.modular.system.service.IFindReportService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 发现举报(评论举报) 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class FindReportServiceImpl extends ServiceImpl<FindReportMapper, FindReport> implements IFindReportService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindServiceImpl.java
New file
@@ -0,0 +1,29 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Find;
import com.stylefeng.guns.modular.system.dao.FindMapper;
import com.stylefeng.guns.modular.system.service.IFindService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.vo.FindVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 发现 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class FindServiceImpl extends ServiceImpl<FindMapper, Find> implements IFindService {
    @Autowired
    private FindMapper findMapper;
    @Override
    public List<FindVO> findList(String nameOrTitle) {
        return findMapper.findList(nameOrTitle);
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessPositionServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.FitnessPosition;
import com.stylefeng.guns.modular.system.dao.FitnessPositionMapper;
import com.stylefeng.guns.modular.system.service.IFitnessPositionService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 健身部位管理 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class FitnessPositionServiceImpl extends ServiceImpl<FitnessPositionMapper, FitnessPosition> implements IFitnessPositionService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessTypeServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.FitnessType;
import com.stylefeng.guns.modular.system.dao.FitnessTypeMapper;
import com.stylefeng.guns.modular.system.service.IFitnessTypeService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 健身类型 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class FitnessTypeServiceImpl extends ServiceImpl<FitnessTypeMapper, FitnessType> implements IFitnessTypeService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseTypeServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandDistrictServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InviteServiceImpl.java
New file
@@ -0,0 +1,24 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.IService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.dao.InviteMapper;
import com.stylefeng.guns.modular.system.dao.OrderMapper;
import com.stylefeng.guns.modular.system.model.Invite;
import com.stylefeng.guns.modular.system.model.Order;
import com.stylefeng.guns.modular.system.service.IInviteService;
import com.stylefeng.guns.modular.system.service.IOrderService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户·订单表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class InviteServiceImpl extends ServiceImpl<InviteMapper, Invite> implements IInviteService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LikeServiceImpl.java
New file
@@ -0,0 +1,30 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.AppUserMapper;
import com.stylefeng.guns.modular.system.dao.LikeMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.Like;
import com.stylefeng.guns.modular.system.service.IAppUserService;
import com.stylefeng.guns.modular.system.service.ILikeService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class LikeServiceImpl extends ServiceImpl<LikeMapper, Like> implements ILikeService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginHistoryServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.LoginHistory;
import com.stylefeng.guns.modular.system.dao.LoginHistoryMapper;
import com.stylefeng.guns.modular.system.service.ILoginHistoryService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户登录设备记录 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class LoginHistoryServiceImpl extends ServiceImpl<LoginHistoryMapper, LoginHistory> implements ILoginHistoryService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginServiceImpl.java
New file
@@ -0,0 +1,30 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.AppUserMapper;
import com.stylefeng.guns.modular.system.dao.LoginMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.Login;
import com.stylefeng.guns.modular.system.service.IAppUserService;
import com.stylefeng.guns.modular.system.service.ILoginService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class LoginServiceImpl extends ServiceImpl<LoginMapper, Login> implements ILoginService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MessageServiceImpl.java
New file
@@ -0,0 +1,30 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Message;
import com.stylefeng.guns.modular.system.dao.MessageMapper;
import com.stylefeng.guns.modular.system.service.IMessageService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.vo.MessageQuery;
import com.stylefeng.guns.modular.system.vo.MessagesVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 消息 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements IMessageService {
    @Autowired
    private MessageMapper messageMapper;
    @Override
    public List<MessagesVO> selectMessages(Integer id, MessageQuery req) {
        return messageMapper.selectMessages(id,req);
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCourseServiceImpl.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.dao.OrderCourseMapper;
import com.stylefeng.guns.modular.system.dao.OrderMapper;
import com.stylefeng.guns.modular.system.model.Order;
import com.stylefeng.guns.modular.system.model.OrderCourse;
import com.stylefeng.guns.modular.system.service.IOrderCourseService;
import com.stylefeng.guns.modular.system.service.IOrderService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户·订单表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class OrderCourseServiceImpl extends ServiceImpl<OrderCourseMapper, OrderCourse> implements IOrderCourseService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Order;
import com.stylefeng.guns.modular.system.dao.OrderMapper;
import com.stylefeng.guns.modular.system.service.IOrderService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户·订单表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PackageServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Package;
import com.stylefeng.guns.modular.system.dao.PackageMapper;
import com.stylefeng.guns.modular.system.service.IPackageService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 套餐管理 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class PackageServiceImpl extends ServiceImpl<PackageMapper, Package> implements IPackageService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PageServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Page;
import com.stylefeng.guns.modular.system.dao.PageMapper;
import com.stylefeng.guns.modular.system.service.IPageService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 启动页 引导页 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class PageServiceImpl extends ServiceImpl<PageMapper, Page> implements IPageService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProtocolServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Protocol;
import com.stylefeng.guns.modular.system.dao.ProtocolMapper;
import com.stylefeng.guns.modular.system.service.IProtocolService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 协议 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class ProtocolServiceImpl extends ServiceImpl<ProtocolMapper, Protocol> implements IProtocolService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Recharge;
import com.stylefeng.guns.modular.system.dao.RechargeMapper;
import com.stylefeng.guns.modular.system.service.IRechargeService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 充值记录 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class RechargeServiceImpl extends ServiceImpl<RechargeMapper, Recharge> implements IRechargeService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RecipientServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Recipient;
import com.stylefeng.guns.modular.system.dao.RecipientMapper;
import com.stylefeng.guns.modular.system.service.IRecipientService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 收货地址 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class RecipientServiceImpl extends ServiceImpl<RecipientMapper, Recipient> implements IRecipientService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPackageServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.RedPackage;
import com.stylefeng.guns.modular.system.dao.RedPackageMapper;
import com.stylefeng.guns.modular.system.service.IRedPackageService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 系统设置-发放红包 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class RedPackageServiceImpl extends ServiceImpl<RedPackageMapper, RedPackage> implements IRedPackageService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHouseResourceServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHousingDemandServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SearchHistoryConditionServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysDataTypeServiceImpl.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysSetServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.SysSet;
import com.stylefeng.guns.modular.system.dao.SysSetMapper;
import com.stylefeng.guns.modular.system.service.ISysSetService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 系统设置 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class SysSetServiceImpl extends ServiceImpl<SysSetMapper, SysSet> implements ISysSetService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UseGuideServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.UseGuide;
import com.stylefeng.guns.modular.system.dao.UseGuideMapper;
import com.stylefeng.guns.modular.system.service.IUseGuideService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 使用指南 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class UseGuideServiceImpl extends ServiceImpl<UseGuideMapper, UseGuide> implements IUseGuideService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCollectServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.UserCollect;
import com.stylefeng.guns.modular.system.dao.UserCollectMapper;
import com.stylefeng.guns.modular.system.service.IUserCollectService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户收藏课程 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class UserCollectServiceImpl extends ServiceImpl<UserCollectMapper, UserCollect> implements IUserCollectService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRecordServiceImpl.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.dao.UseGuideMapper;
import com.stylefeng.guns.modular.system.dao.UserRecordMapper;
import com.stylefeng.guns.modular.system.model.UseGuide;
import com.stylefeng.guns.modular.system.model.UserRecord;
import com.stylefeng.guns.modular.system.service.IUseGuideService;
import com.stylefeng.guns.modular.system.service.IUserRecordService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 使用指南 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class UserRecordServiceImpl extends ServiceImpl<UserRecordMapper, UserRecord> implements IUserRecordService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserWatchServiceImpl.java
New file
@@ -0,0 +1,30 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.AppUserMapper;
import com.stylefeng.guns.modular.system.dao.UserWatchMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.UserWatch;
import com.stylefeng.guns.modular.system.service.IAppUserService;
import com.stylefeng.guns.modular.system.service.IUserWatchService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class UserWatchServiceImpl extends ServiceImpl<UserWatchMapper, UserWatch> implements IUserWatchService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.stylefeng.guns.modular.system.model.Withdrawal;
import com.stylefeng.guns.modular.system.dao.WithdrawalMapper;
import com.stylefeng.guns.modular.system.service.IWithdrawalService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 提现记录 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class WithdrawalServiceImpl extends ServiceImpl<WithdrawalMapper, Withdrawal> implements IWithdrawalService {
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ApplePayUtil.java
New file
@@ -0,0 +1,107 @@
package com.stylefeng.guns.modular.system.util;
import javax.net.ssl.*;
        import java.io.BufferedOutputStream;
        import java.io.BufferedReader;
        import java.io.InputStream;
        import java.io.InputStreamReader;
        import java.net.URL;
        import java.security.cert.CertificateException;
        import java.security.cert.X509Certificate;
        import java.util.Locale;
/**
 * 苹果IAP内购验证工具类
 * Created by wangqichang on 2019/2/26.
 */
public class ApplePayUtil {
    private static class TrustAnyTrustManager implements X509TrustManager {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[] {};
        }
    }
    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }
    private static final String url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
    private static final String url_verify = "https://buy.itunes.apple.com/verifyReceipt";
    /**
     * 苹果服务器验证
     *
     * @param receipt
     *            账单
     * @url 要验证的地址
     * @return null 或返回结果 沙盒 https://sandbox.itunes.apple.com/verifyReceipt
     *
     */
    public static String buyAppVerify(String receipt,int type) {
        //环境判断 线上/开发环境用不同的请求链接
        String url = "";
        if(type==0){
            url = url_sandbox; //沙盒测试
        }else{
            url = url_verify; //线上测试
        }
        //String url = EnvUtils.isOnline() ?url_verify : url_sandbox;
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
            URL console = new URL(url);
            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
            conn.setSSLSocketFactory(sc.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
            conn.setRequestMethod("POST");
            conn.setRequestProperty("content-type", "text/json");
            conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
            String str = String.format(Locale.CHINA, "{\"receipt-data\":\"" + receipt + "\"}");//拼成固定的格式传给平台
            hurlBufOus.write(str.getBytes());
            hurlBufOus.flush();
            InputStream is = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line = null;
            StringBuffer sb = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();
        } catch (Exception ex) {
            System.out.println("苹果服务器异常");
            ex.printStackTrace();
        }
        return null;
    }
    /**
     * 用BASE64加密
     *
     * @param str
     * @return
     */
    public static String getBASE64(String str) {
        byte[] b = str.getBytes();
        String s = null;
        if (b != null) {
            s = new sun.misc.BASE64Encoder().encode(b);
        }
        return s;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AuditUtil.java
New file
@@ -0,0 +1,200 @@
package com.stylefeng.guns.modular.system.util;
import com.alibaba.fastjson.JSONObject;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.moderation.v3.region.ModerationRegion;
import com.huaweicloud.sdk.moderation.v3.*;
import com.huaweicloud.sdk.moderation.v3.model.*;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.ArrayList;
@Component
public class AuditUtil {
    // 根据作业id查询视频是否通过审核
    public String audit(String id){
        String temp ="";
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);
        ModerationClient client = ModerationClient.newBuilder()
                .withCredential(auth)
                .withRegion(ModerationRegion.valueOf("cn-north-4"))
                .build();
        RunQueryVideoModerationJobRequest request = new RunQueryVideoModerationJobRequest();
        request.withJobId(id);
        try {
            RunQueryVideoModerationJobResponse response = client.runQueryVideoModerationJob(request);
            temp = response.getStatus().getValue();
            System.out.println(response.toString());
            return temp;
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
        return temp;
    }
    public String video(String text){
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);
        ModerationClient client = ModerationClient.newBuilder()
                .withCredential(auth)
                .withRegion(ModerationRegion.valueOf("cn-north-4"))
                .build();
        RunCreateVideoModerationJobRequest request = new RunCreateVideoModerationJobRequest();
        VideoCreateRequest body = new VideoCreateRequest();
        List<VideoCreateRequest.AudioCategoriesEnum> listbodyAudioCategories = new ArrayList<>();
        listbodyAudioCategories.add(VideoCreateRequest.AudioCategoriesEnum.fromValue("porn"));
        listbodyAudioCategories.add(VideoCreateRequest.AudioCategoriesEnum.fromValue("ad"));
        listbodyAudioCategories.add(VideoCreateRequest.AudioCategoriesEnum.fromValue("politics"));
        listbodyAudioCategories.add(VideoCreateRequest.AudioCategoriesEnum.fromValue("politics"));
        listbodyAudioCategories.add(VideoCreateRequest.AudioCategoriesEnum.fromValue("abuse"));
        List<VideoCreateRequest.ImageCategoriesEnum> listbodyImageCategories = new ArrayList<>();
        listbodyImageCategories.add(VideoCreateRequest.ImageCategoriesEnum.fromValue("porn"));
        listbodyImageCategories.add(VideoCreateRequest.ImageCategoriesEnum.fromValue("politics"));
        listbodyImageCategories.add(VideoCreateRequest.ImageCategoriesEnum.fromValue("terrorism"));
        listbodyImageCategories.add(VideoCreateRequest.ImageCategoriesEnum.fromValue("image_text"));
        VideoCreateRequestData databody = new VideoCreateRequestData();
        databody.withUrl(text).withFrameInterval(20)
                .withLanguage(VideoCreateRequestData.LanguageEnum.fromValue("zh"));
        body.withAudioCategories(listbodyAudioCategories);
        body.withImageCategories(listbodyImageCategories);
        body.withEventType(VideoCreateRequest.EventTypeEnum.fromValue("default"));
        body.withBizType("a123");
        body.withData(databody);
        request.withBody(body);
        try {
            RunCreateVideoModerationJobResponse response = client.runCreateVideoModerationJob(request);
            return response.getJobId();
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
        return "";
    }
    public AuditVO content(String text){
        AuditVO auditVO = new AuditVO();
        Boolean temp = true;
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);
        ModerationClient client = ModerationClient.newBuilder()
                .withCredential(auth)
                .withRegion(ModerationRegion.valueOf("cn-north-4"))
                .build();
        RunTextModerationRequest request = new RunTextModerationRequest();
        TextDetectionReq body = new TextDetectionReq();
        TextDetectionDataReq databody = new TextDetectionDataReq();
        databody.withText(text)
                .withLanguage(TextDetectionDataReq.LanguageEnum.fromValue("zh"));
//        List<String> listbodyGlossaryNames = new ArrayList<>();
//        listbodyGlossaryNames.add("txt1");
//        body.withGlossaryNames(listbodyGlossaryNames);
        body.withBizType("a123");
        body.withData(databody);
        body.withEventType("comment");
        request.withBody(body);
        try {
            RunTextModerationResponse response = client.runTextModeration(request);
            System.err.println(response.toString());
            TextDetectionResult result = response.getResult();
            auditVO.setType(result.getLabel());
            if (!result.getSuggestion().equals("pass")){
                // 审核不通过
                temp = false;
            }
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
        auditVO.setTemp(temp);
        return auditVO;
    }
    public AuditVO image(String image){
        AuditVO auditVO = new AuditVO();
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);
        ModerationClient client = ModerationClient.newBuilder()
                .withCredential(auth)
                .withRegion(ModerationRegion.valueOf("cn-north-4"))
                .build();
        CheckImageModerationRequest request = new CheckImageModerationRequest();
        ImageDetectionReq body = new ImageDetectionReq();
        List<String> listbodyCategories = new ArrayList<>();
        listbodyCategories.add("porn");
        listbodyCategories.add("terrorism");
        listbodyCategories.add("image_text");
        body.withLanguage(ImageDetectionReq.LanguageEnum.fromValue("zh"));
        body.withBizType("a123");
        // 图片地址
        body.withUrl(image);
        body.withCategories(listbodyCategories);
        body.withEventType("album");
        request.withBody(body);
        try {
            CheckImageModerationResponse response = client.checkImageModeration(request);
            if (!response.getResult().getSuggestion().equals("pass")){
                auditVO.setType(response.getResult().getCategory());
            }else{
                auditVO.setType("pass");
            }
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
        return auditVO;
    }
//
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AuditVO.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.util;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 公共封装类
 */
@ApiModel("公共对象")
@Data
public class AuditVO {
    @ApiModelProperty("是否违规")
    private Boolean temp;
    @ApiModelProperty("违规类型")
    private String type;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Constant.java
New file
@@ -0,0 +1,24 @@
/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
 */
package com.stylefeng.guns.modular.system.util;
public final class Constant {
    // verify ssl certificate (true) or do not verify (false)
    public static final boolean DO_VERIFY = false;
    public static final String HTTPS = "HTTPS";
    public static final String TRUST_MANAGER_FACTORY = "SunX509";
    public static final String GM_PROTOCOL = "GMTLS";
    public static final String INTERNATIONAL_PROTOCOL = "TLSv1.2";
    public static final String SIGNATURE_ALGORITHM_SDK_HMAC_SHA256 = "SDK-HMAC-SHA256";
    public static final String SIGNATURE_ALGORITHM_SDK_HMAC_SM3 = "SDK-HMAC-SM3";
    public static final String[] SUPPORTED_CIPHER_SUITES = {"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
            "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
            "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"};
    public static final String SECURE_RANDOM_ALGORITHM_NATIVE_PRNG_NON_BLOCKING = "NativePRNGNonBlocking";
    private Constant() {
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtils.java
@@ -229,6 +229,7 @@
        return date;
    }
    /**
     * 指定日期所在周的周一和周日时间
     *
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HWSendSms.java
New file
@@ -0,0 +1,153 @@
package com.stylefeng.guns.modular.system.util;
import com.cloud.apigateway.sdk.utils.Client;
import com.cloud.apigateway.sdk.utils.Request;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.net.ssl.SSLContext;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Arrays;
@Component
public class HWSendSms {
    @Value("${huawei.url}")
    private String url;
    @Value("${huawei.appKey}")
    private String appKey;
    @Value("${huawei.appSecret}")
    private String appSecret;
    @Value("${huawei.sender}")
    private String sender;
    @Value("${huawei.templateId}")
    private String templateId;
    @Value("${huawei.signature}")
    private String signature;
    private static final Logger LOGGER = LoggerFactory.getLogger(HWSendSms.class);
    public static final String UTF_8 = "UTF-8";
    private static CloseableHttpClient client =  null;
    public static void main(String[] args) throws Exception {
        // 为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题
//        client = createIgnoreSSLHttpClient();
//        sendSms();
    }
    public void sendSms(String code,String receiver) throws Exception {
        client = createIgnoreSSLHttpClient();
        //必填,请参考"开发准备"获取如下数据,替换为实际值
//        String url = "https://smsapi.ap-southeast-1.myhuaweicloud.com:443/sms/batchSendSms/v1"; //APP接入地址+接口访问URI
//        // 认证用的appKey和appSecret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
//        String appKey = "c8RWg3gg************3Y7x1Ile"; //Application Key
//        String appSecret = "q4Ii87Bh************80SfD7Al"; //Application Secret
//        String sender = "csms12345678"; //中国大陆短信签名通道号或全球短信通道号
//        String templateId = "8ff55eac1d0b478ab3c06c3c6a492300"; //模板ID
//
//        //条件必填,中国大陆短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称
//        //全球短信不用关注该参数
//        String signature = "华为云短信测试"; //签名名称
//
//        //必填,全局号码格式(包含国家码),示例:+86151****6789,多个号码之间用英文逗号分隔
//        String receiver = "+86151****6789,+86152****7890"; //短信接收人号码
//
//        //选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告
        String statusCallBack = "";
        /**
         * 选填,使用无变量模板时请赋空值 String templateParas = "";
         * 单变量模板示例:模板内容为"您的验证码是${NUM_6}"时,templateParas可填写为"[\"111111\"]"
         * 双变量模板示例:模板内容为"您有${NUM_2}件快递请到${TXT_20}领取"时,templateParas可填写为"[\"3\",\"人民公园正门\"]"
         * 查看更多模板规范和变量规范:产品介绍>短信模板须知和短信变量须知
         */
        String templateParas = "[\""+code+"\"]"; //模板变量,此处以单变量验证码短信为例,请客户自行生成6位验证码,并定义为字符串类型,以杜绝首位0丢失的问题(例如:002569变成了2569)。
        //请求Body,不携带签名名称时,signature请填null
        String body = buildRequestBody(sender, receiver, templateId, templateParas, statusCallBack, signature);
        if (null == body || body.isEmpty()) {
            LOGGER.warn("body is null.");
            return;
        }
        Request request = new Request();
        request.setKey(appKey);
        request.setSecret(appSecret);
        request.setMethod("POST");
        request.setUrl(url);
        request.addHeader("Content-Type", "application/x-www-form-urlencoded");
        request.setBody(body);
        LOGGER.info("Print the body: {}", body);
        try {
            HttpRequestBase signedRequest = Client.sign(request, Constant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256);
            LOGGER.info("Print the authorization: {}", Arrays.toString(signedRequest.getHeaders("Authorization")));
            Header[] requestAllHeaders = signedRequest.getAllHeaders();
            for (Header h : requestAllHeaders) {
                LOGGER.info("req Header with name: {} and value: {}", h.getName(), h.getValue());
            }
            HttpResponse response = client.execute(signedRequest);
            LOGGER.info("Print the status line of the response: {}", response.getStatusLine().toString());
            Header[] resHeaders = response.getAllHeaders();
            for (Header h : resHeaders) {
                LOGGER.info("Processing Header with name: {} and value: {}", h.getName(), h.getValue());
            }
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null) {
                LOGGER.info("Processing Body with name: {} and value: {}",
                        System.getProperty("line.separator"),
                    EntityUtils.toString(resEntity, "UTF-8"));
            }
        } catch (Exception e) {
            LOGGER.info(e.getMessage(), e);
            e.printStackTrace();
        }
    }
    public CloseableHttpClient createIgnoreSSLHttpClient() throws Exception {
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (x509CertChain, authType) -> true).build();
        return HttpClients.custom().setSSLSocketFactory(new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE)).build();
    }
    static String buildRequestBody(String sender, String receiver, String templateId, String templateParas,
                                   String statusCallBack, String signature) throws UnsupportedEncodingException {
        if (null == sender || null == receiver || null == templateId || sender.isEmpty() || receiver.isEmpty()
            || templateId.isEmpty()) {
            System.out.println("buildRequestBody(): sender, receiver or templateId is null.");
            return null;
        }
        StringBuilder body = new StringBuilder();
        appendToBody(body, "from=", sender);
        appendToBody(body, "&to=", receiver);
        appendToBody(body, "&templateId=", templateId);
        appendToBody(body, "&templateParas=", templateParas);
        appendToBody(body, "&statusCallback=", statusCallBack);
        appendToBody(body, "&signature=", signature);
        return body.toString();
    }
    private static void appendToBody(StringBuilder body, String key, String val) throws UnsupportedEncodingException {
        if (null != val && !val.isEmpty()) {
            LOGGER.info("Print appendToBody: {}:{}", key, val);
            body.append(key).append(URLEncoder.encode(val, UTF_8));
        }
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpRequestUtil.java
@@ -56,20 +56,20 @@
        return result;
    }
    public static String getRequest(String url, Map<String, String> params) {
    public static String getRequest(String url) {
        // 构造HttpClient实例
        HttpClient client = new HttpClient();
        // 拼接参数
        String paramStr = "";
        if(params!=null){
            for (String key : params.keySet()) {
                paramStr = paramStr + "&" + key + "=" + params.get(key);
            }
            paramStr = paramStr.substring(1);
        }
//        // 拼接参数
//        String paramStr = "";
//        if(params!=null){
//            for (String key : params.keySet()) {
//                paramStr = paramStr + "&" + key + "=" + params.get(key);
//            }
//            paramStr = paramStr.substring(1);
//        }
        // 创建GET方法的实例
        GetMethod method = new GetMethod(url + "?" + paramStr);
        GetMethod method = new GetMethod(url );
        // 接收返回结果
        String result = null;
        try {
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/IosVerifyUtil.java
New file
@@ -0,0 +1,97 @@
package com.stylefeng.guns.modular.system.util;
import org.json.JSONObject;
import javax.net.ssl.*;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Locale;
/**
 * 苹果IAP内购验证工具类
 * Created by wangqichang on 2019/2/26.
 */
public class IosVerifyUtil {
    private static class TrustAnyTrustManager implements X509TrustManager {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[] {};
        }
    }
    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }
    private static final String url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
    private static final String url_verify = "https://buy.itunes.apple.com/verifyReceipt";
    /**
     * 苹果服务器验证
     *
     * @param receipt
     *            账单
     * @url 要验证的地址
     * @return null 或返回结果 沙盒 https://sandbox.itunes.apple.com/verifyReceipt
     *
     */
    public static String buyAppVerify(String receipt,int type) {
        //环境判断 线上/开发环境用不同的请求链接
        String url = "";
        if(type==0){
            url = url_sandbox; //沙盒测试
        }else{
            url = url_verify; //线上测试
        }
        //String url = EnvUtils.isOnline() ?url_verify : url_sandbox;
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
            URL console = new URL(url);
            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
            conn.setSSLSocketFactory(sc.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
            conn.setRequestMethod("POST");
            conn.setRequestProperty("content-type", "text/json");
            conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
            JSONObject obj = new JSONObject();
            obj.put("receipt-data", receipt);
            //自动续费产品加上password
            // obj.put("password", "**************");
            hurlBufOus.write(obj.toString().getBytes());
            hurlBufOus.flush();
            InputStream is = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line = null;
            StringBuffer sb = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();
        } catch (Exception ex) {
            System.out.println("苹果服务器异常");
            ex.printStackTrace();
        }
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5AndKL.java
@@ -103,15 +103,14 @@
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    public static void main(String args[]) {
        logger.debug("MD5后再加密:" + KL(MD5("123456")));
        logger.debug(MD5("123456"));
        // logger.debug("加密:" + KL(MD5("123456")));
//        logger.debug("MD5后再加密:" + KL(MD5("123456")));
//        logger.debug(MD5("123456"));
//         logger.debug("加密:" + KL(MD5("123456")));
        // s = KL(s);
        // logger.debug("解密:" + KL("81dc9bdb52d04dc20036dbd8313ed055"));
        // logger.debug("解密:" + JM(KL(s)));
        // logger.debug("解密为MD5后的:" + KL(KL(MD5(s))));
        // logger.debug(JM("5d62957bb57d3e49dcf48a0df064be4c"));
//         logger.debug(JM("5d62957bb57d3e49dcf48a0df064be4c"));
        // logger.debug(MD5AndKL.KL(MD5AndKL.MD5("admin"+"87654321")));
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Md5Util.java
New file
@@ -0,0 +1,48 @@
package com.stylefeng.guns.modular.system.util;
import java.security.MessageDigest;
public class Md5Util {
    private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    /**
     * MD5加密
     *
     * @param origin      字符
     * @param charsetname 编码
     * @return
     */
    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (null == charsetname || "".equals(charsetname)) {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            } else {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
            }
        } catch (Exception e) {
        }
        return resultString;
    }
    public static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
    public static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n += 256;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigIts[d1] + hexDigIts[d2];
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PasswordUtils.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.util;
import org.mindrot.jbcrypt.BCrypt;
public class PasswordUtils {
    public static String hashPassword(String password) {
        return BCrypt.hashpw(password, BCrypt.gensalt());
    }
    public static boolean checkPassword(String password, String hashedPassword) {
        return BCrypt.checkpw(password, hashedPassword);
    }
    public static void main(String[] args) {
        String password = "myPassword";
        String hashedPassword = hashPassword(password);
        System.out.println("Hashed Password: " + hashedPassword);
        boolean isPasswordCorrect = checkPassword(password, hashedPassword);
        System.out.println("Is Password Correct? " + isPasswordCorrect);
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
New file
@@ -0,0 +1,1275 @@
package com.stylefeng.guns.modular.system.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.*;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import com.stylefeng.guns.modular.system.util.httpClinet.HttpClientUtil;
import org.apache.commons.collections.map.HashedMap;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.util.*;
//import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver;
//import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingRequest;
//import com.github.binarywang.wxpay.service.ProfitSharingV3Service;
//import com.github.binarywang.wxpay.service.WxPayService;
/**
 * 第三方支付工具类
 */
@Component
public class PayMoneyUtil {
    private String aliAppid = "2021004137643228";//支付宝appid
    private String appPrivateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCBMKFpKKMTSL9XAotOLeWsFMwzj6UEnukKX6pkZ4Nn1/0VayNc1N+BJqVA8aCr09dDsrBKJ67bJYNwwgr4rfVRz6DxJmctapfyf41/fwMGLwkG96Mcis1+XI8fRqMctf7RoWwVbuvkX0x93kpuNlHJCSuKzc+iT9qPWNp0DwPQa/T354fzztAmGWREY6v67OeTI/kFO5pnOvRqvPPgGCkvqQmGoSk6BQavQSy0jqyOf98FfvCT3GZPhohHqxUAIy1NjUs98KgLUTgv9Uo7OoLrzGOkQBIkL53bgh7rkLukgbo9D/qYxo3rK55LgJtDgP+qZrsVPDwa65Ntyi/r0WJLAgMBAAECggEAI11AkhzBp0G+vv6/S4Nc36JB08t6jK1DdceCSUHcwsxpRzew0nSjSiNeEU0TgnXW830yrNn4D51RQcicYD6ebOq9T8YHcHNBbOxlu4T1OvgdLH8Vc3a7kd+cfh9D/1QCkTfy8lsOz9EWi04SaeEMuk98T97O+8uINL1J74M8tAyzzNZqcsGjCvCSoVqdUGVVJX/5tkTq1HI4y+jAyJYg+JhhKzxI0grHb6ktzdJ+iIClHJ7hV3CFV6S4FKcAhOjcsB+r7W6pc98mlHqK+EuN3i7SUv81XWVfHrp12hiFn6J4x+NturK3i2MfQA9aH7BRJTTo+DH7tYseID5s8q3GgQKBgQDeLWfuzSbS2RoBHdO89tsUPaSgif5RbJvp/Cl5zBnfyWxk/knUWMzTyqYiuOVU9/qWF4i5uvFCnpaS8oPKvCiG2YEG+k0bT63r129K8gRqqx62PisNqEeLmOjj+HuI9flV8pOzJBkLNNbdundkh3Li6eiv1Di47+H3dPdha3K60QKBgQCU21y7qssRRS7pbi3GygoZC1Xq236RZJor2ZPPOJi4flyyLhQI0S+dpzyb8t32y8mHTIrDZnK/km16tQChe9cCkKOyaUYvJOIbfce0A+GWM5jzS3Yan0GtoNBNqd+ayrqAVxjS++RU55wBpgEFNB1lyp+Es982HjYivrWCDoPaWwKBgDcMbQoADrSDUiwgpcvWJiX3uAiG6FpoXKE291fUODz4fUDwuH5Cmk2Hkm5b/YZ2AsKZhijupsRo4sn6CKl8wVXYIl4GOoCf12nt8QdSu8FqMKva73Ps0/1En7+MW59twp+HAQ2LziC2sN4zS02/Obn7Vsnp/TvlQ8m6U2jx5HVhAoGAY4Q7/OL0G7mq4ThdtjbAhXnEmNzhQwaE46f0X2cxArbH9f9EOZjQQo/Zv1ChACvBsYiEhJnrQRP9yTlVEKCgYACez9n9p+r6lvKCHmEx4Z7hNFZQwP+Tgyat3B4jdXLvOHoCCJuKTREChT+cEwSCWtkZyDgQlDeibZwd8LMPh10CgYBnZtYU6bo7l5CtXWQbpZB/cl7bznHxtfNYhiqKNcUx1+zh6tLDcwmk+CkFjHWYgWCiXOu+EeSQys7v/ps/C1nKUVEy1bytLNU3pdy63aZ/6WzD8MIwOwkZZch9sm9LK//Ar+E7CtC2NsxSN1elqjoEVeQMqKSj5MNt8XlDlCzwVQ==";//支付宝开发者应用私钥
    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAouYvZ1v4RiydwNOnGcU0Hb4hQu0x6XUooaE2Bi6/atNOobtFdunnATGP6OMOW7yF9DpP8qH5mbFXAiaQD721y/7qlayI50UcV4mngRU4ZcaAVE3bp721Eg2H85RISa+Tb1CiOh+pc9p4l5UBseKsvB2ruHHForfZDPI8FL7AVUKBYCQPsa4zL6KAO2C6KULaTg/lCa+bYQKU0n9ca569VtdsqJUyxB9eSZjVd+9nKl62FLqp2NELGj7cXqiVBgDnBnVS5ZUO3mrBM5z/AxQbw3RwE3JqdkhzUA1BFjejAlT2zIGNOjUFagF8ao0wGElYfuk0bum6Hz5qWAt02QdNNwIDAQAB";//支付宝应用公钥
    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw4KgQIQq9Pl91tG9NS8N9bs7xF89/L2jHgLWuG5kStoorvm5j3W5Bc0jSW01HgEXSks99xKeOhfebHurTehuamIs/2G8atT4haejl4Qip2ZvkhsQm+So3oFj2E8Q1QGrpISc9TwHxfpErEJInc8xd5TjYkPxVFQY25oQ3O2yOvvWxdxGZttdEDm6mE+udNjY72YqUvh1U9cMCIpj+4AugHh/5L3eo5VHQNA6rIvX1WSFqJ/vcXrT3RSPSg33lD0MEMR9+ICR88mPi6zbt5dTbCR8us/qK7+hJ3yb3LyQxNH+2DmyVYX5pSEkXMK+2mTwaUWd1z5Oeg1iXW6ev3f+9wIDAQAB";//支付宝支付公钥
    private String smid = "2088330203191220";//平台支付宝商户号...
    private String appid = "wx41d32f362ba0f911";//微信appid
    private String appSecret = "cf0ebf950f5926a69041a0e2bbe20f3e";
    private String mchId = "1501481761";//微信商户号
    private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号
    private String callbackPath = "https://jkcyl.cn/app";//支付回调网关地址
    private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
    private String alipay_cert_path = "C:/cert/alipay/user/alipay_cert_path.crt";//支付宝公钥证书文件路径
    private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径
    private String certPath = "/usr/playpai/cert/weixin/apiclient_cert.p12";//微信证书
    /**
     * 支付宝支付
     */
    public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
        //实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
        model.setTimeoutExpress("30m");
        model.setTotalAmount(new BigDecimal(amount).setScale(2, RoundingMode.HALF_UP).toString());//付款金额
        model.setProductCode("QUICK_MSECURITY_PAY");
        model.setPassbackParams(passbackParams);//自定义参数
        request.setBizModel(model);
        request.setNotifyUrl(callbackPath + notifyUrl);
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
            Map<String, String> map = new HashMap<>();
            map.put("orderString", response.getBody());
            map.put("returnId", passbackParams);
            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
            return ResultUtil.success(map);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 支付宝扫码支付下单
     *
     * @param body
     * @param subject
     * @param outTradeNo
     * @param amount
     * @param notifyUrl
     * @return
     */
    public ResultUtil aliScanCodePay(String body, String subject, String outTradeNo, String amount, String notifyUrl) {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2"); //获得初始化的AlipayClient
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类
        request.setBizContent("{" +
                "    \"out_trade_no\":\"" + outTradeNo + "\"," +//商户订单号
                "    \"total_amount\":\"" + 1 + "\"," +
                "    \"subject\":\"" + subject + "\"," +
                "    \"notify_url\":\"" + callbackPath + notifyUrl + "\"," +
                "    \"body\":\"" + body + "\"," +
                "    \"store_id\":\"NJ_001\"," +
                "    \"timeout_express\":\"90m\"}");//订单允许的最晚付款时间
        AlipayTradePrecreateResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        JSONObject alipay_trade_precreate_response = JSON.parseObject(response.getBody()).getJSONObject("alipay_trade_precreate_response");
        System.err.print(alipay_trade_precreate_response.getString("qr_code"));
        return ResultUtil.success(alipay_trade_precreate_response.getString("qr_code"));
    }
    // 直付通模式 alipay.trade.settle.confirm(统一收单确认结算接口)
    public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                aliAppid,
                appPrivateKey,
                "json",
                "GBK",
                alipay_public_key,
                "RSA2");
        AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest();
        request.setBizContent("{" +
                "  \"out_request_no\":\""+code+"\"," +
                "  \"trade_no\":\""+outTradeNo+"\"," +
                "  \"settle_info\":{" +
                "    \"settle_detail_infos\":[" +
                "      {" +
                "        \"trans_in_type\":\"defaultSettle\"," +
                "        \"settle_entity_id\":\""+smid1+"\"," +
                "        \"settle_entity_type\":\"SecondMerchant\"," +
                "        \"amount\":"+amount+"," +
                "      }" +
                "    ]" +
                "  }," +
                "  \"extend_params\":{" +
                "    \"royalty_freeze\":\"false\"" +
                "  }" +
                "}");
        AlipayTradeSettleConfirmResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if(response.isSuccess()){
            System.out.println("调用成功");
            return ResultUtil.success();
        } else {
            System.out.println("调用失败");
            return ResultUtil.error("出现问题啦");
        }
    }
    /**
     * 支付成功后的回调处理逻辑
     *
     * @param request
     */
    public Map<String, String> alipayCallback(HttpServletRequest request) {
        //获取支付宝POST过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + "_";
            }
            //乱码解决,这段代码在出现乱码时使用。
            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
        }
        //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
//        try {
//            boolean flag = AlipaySignature.rsaCheckV1(params, alipay_public_key, "UTF-8","RSA2");
//            if(flag){
//                Map<String, String> map = new HashMap<>();
//                String out_trade_no = params.get("out_trade_no");
//                String subject = params.get("subject");
//                String total_amount = params.get("total_amount");
//                String trade_no = params.get("trade_no");
//                String passback_params = params.get("passback_params");
//                map.put("out_trade_no", out_trade_no);//商家订单号
//                map.put("subject", subject);
//                map.put("total_amount", total_amount);
//                map.put("trade_no", trade_no);//支付宝交易号
//                map.put("passback_params", passback_params);//回传参数
//                return map;
//            }else{
//                System.err.println("验签失败");
//            }
//
//        } catch (AlipayApiException e) {
//            e.printStackTrace();
//        }
//        return null;
        Map<String, String> map = new HashMap<>();
        String out_trade_no = params.get("out_trade_no");
        String subject = params.get("subject");
        String total_amount = params.get("total_amount");
        String trade_no = params.get("trade_no");
        String passback_params = params.get("passback_params");
        map.put("out_trade_no", out_trade_no);//商家订单号
        map.put("subject", subject);
        map.put("total_amount", total_amount);
        map.put("trade_no", trade_no);//支付宝交易号
        map.put("passback_params", passback_params);//回传参数
        return map;
    }
    /**
     * 支付宝查询订单支付状态
     *
     * @param out_trade_no
     * @return
     * @throws Exception
     */
    public AlipayTradeQueryResponse queryALIOrder(String out_trade_no) throws Exception {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        request.setBizContent("{" +
                "  \"out_trade_no\":\"" + out_trade_no + "\"" +
                "}");
        AlipayTradeQueryResponse response = alipayClient.execute(request);
        return response;
//        if(response.isSuccess()){
//            String tradeStatus = response.getTradeStatus();//交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款)
//            return ResultUtil.success(response);
//        } else {
//            return ResultUtil.error(response.getMsg());
//        }
    }
    /**
     * 微信统一下单
     *
     * @param body         商品描述
     * @param attach       附加数据
     * @param out_trade_no 商户订单号
     * @param total_fee    标价金额
     * @param notify_url   通知地址
     * @param tradeType    交易类型
     * @return
     */
    public ResultUtil weixinpay(String body, String attach, String out_trade_no, String total_fee, String notify_url, String tradeType, String openId) throws Exception {
        int i = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
        String hostAddress = null;
        try {
            hostAddress = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        String nonce_str = UUIDUtil.getRandomCode(16);
        Map<String, Object> map = new HashMap<>();
        map.put("appid", appid);
        map.put("mch_id", mchId);
        map.put("nonce_str", nonce_str);
        map.put("body", body);
        map.put("attach", attach);//存储订单id
        map.put("out_trade_no", out_trade_no);//存储的订单code
        map.put("total_fee", i);
        map.put("spbill_create_ip", hostAddress);
        map.put("notify_url", callbackPath + notify_url);
        map.put("trade_type", tradeType);
        if ("JSAPI".equals(tradeType)) {
            map.put("openid", openId);
        }
        String s = this.weixinSignature(map);
        map.put("sign", s);
        String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
        //设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        StringBuffer xmlString = new StringBuffer();
        Set<String> strings = map.keySet();
        String[] keys = {};
        keys = strings.toArray(keys);
        Arrays.sort(keys);
        xmlString.append("<xml>");
        for (int l = 0; l < keys.length; l++) {
            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
        }
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String body1 = HttpClientUtil.pushHttpRequsetXml(url, xmlString.toString(), new HashMap<>()).getData();
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[", "");
        body1 = body1.replaceAll("]]>", "");
        try {
            map1 = this.xmlToMap(body1, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        String return_code = map1.get("return_code");
        if ("SUCCESS".equals(return_code)) {
            String result_code = map1.get("result_code");
            if ("SUCCESS".equals(result_code)) {
                String type = map1.get("trade_type");
                String prepay_id = map1.get("prepay_id");
                switch (type) {
                    case "JSAPI":
                        //重新进行签名后返回给前端
                        Map<String, Object> map2 = new HashMap<>();
                        map2.put("appId", map1.get("appid"));
                        map2.put("nonceStr", map1.get("nonce_str"));
                        map2.put("package", "prepay_id=" + prepay_id);
                        map2.put("signType", "MD5");
                        map2.put("timeStamp", new Date().getTime() + "");
                        String s2 = this.weixinSignature(map2);
                        map2.put("prepay_id", prepay_id);
                        map2.put("mch_id", map1.get("mch_id"));
                        map2.put("trade_type", map1.get("trade_type"));
                        map2.put("sign", s2);
                        return ResultUtil.success(map2);
                    case "NATIVE":
                        String code_url = map1.get("code_url");
                        return ResultUtil.success(code_url);
                    case "APP":
                        //重新进行签名后返回给前端
                        Map<String, Object> map3 = new HashMap<>();
                        map3.put("appid", appid);
                        map3.put("noncestr", nonce_str);
                        map3.put("package", "Sign=WXPay");
                        map3.put("partnerid", mchId);
                        map3.put("prepayid", prepay_id);
                        map3.put("timestamp", new Date().getTime() / 1000);
                        String s1 = this.weixinSignature(map3);
                        map3.put("sign", s1);
                        System.err.println(map3);
                        return ResultUtil.success(map3);
                }
                return null;
            } else {
                System.err.println(map1.get("err_code_des"));
                return ResultUtil.error(map1.get("err_code_des"));
            }
        } else {
            System.err.println(map1.get("return_msg") + appid + "----" + mchId);
            return ResultUtil.error(map1.get("return_msg"), new JSONObject());
        }
    }
    /**
     * 微信支付成功后的回调处理
     *
     * @param request
     */
    public Map<String, String> weixinpayCallback(HttpServletRequest request) {
        try {
            String param = this.getParam(request);
            param = param.replaceAll("<!\\[CDATA\\[", "");
            param = param.replaceAll("]]>", "");
            Map<String, String> map = this.xmlToMap(param, "UTF-8");
            String return_code = map.get("return_code");
            if ("SUCCESS".equals(return_code)) {
                String result_code = map.get("result_code");
                if ("SUCCESS".equals(result_code)) {
                    Map<String, String> map1 = new HashedMap();
                    map1.put("nonce_str", map.get("nonce_str"));
                    map1.put("out_trade_no", map.get("out_trade_no"));//存储的订单code
                    map1.put("attach", map.get("attach"));//存储订单id
                    map1.put("total_fee", map.get("total_fee"));
                    map1.put("transaction_id", map.get("transaction_id"));//微信支付订单号
                    String result = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                    map1.put("result", result);
                    return map1;
                } else {
                    System.err.println(map.get("err_code_des"));
                }
            } else {
                System.err.println(map.get("return_msg"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }
//    @Autowired
//    private WxPayService wxPayService;
    //分账
//    public ResultUtil order(String code) throws Exception {
//
//
//
//                  Integer    coursePackagePayments = coursePackageClient.queryByCode(code);
//                  Integer paymentCompetitions = competitionsClient.queryByCode(code);
//                  Integer siteBookings = siteClient.queryByCode(code);
//        List<Integer> stores = new ArrayList<>();
//                stores.add(coursePackagePayments);
//                stores.add(paymentCompetitions);
//                stores.add(siteBookings);
//
//                OperatorUser operatorUser = siteClient.queryOperator(stores);
//
//
////        WxPayService myWxPayService = wxPayService.switchoverTo("mch_id");
////
////        ProfitSharingV3Service profitSharingV3Service = myWxPayService.getProfitSharingV3Service();
//
//        String nonceStr = RandomUtil.randomString(32);
//        String appId = "您的appid";
//
//
//        //添加分账方
//
////        ProfitSharingReceiver profitSharingReceiver = new ProfitSharingReceiver();
////        profitSharingReceiver.setAccount("appid对应的openId");
////        profitSharingReceiver.setAmount(1l);
////        profitSharingReceiver.setAppid(appId);
////        profitSharingReceiver.setType("PERSONAL_OPENID");
////        profitSharingReceiver.setRelationType("PARTNER");
////        profitSharingV3Service.addProfitSharingReceiver(profitSharingReceiver);
//
//        //分账
//        ProfitSharingRequest profitSharingRequest = new ProfitSharingRequest();
//        profitSharingRequest.setAppid(appId);
//        profitSharingRequest.setTransactionId("微信支付订单号");
//        profitSharingRequest.setOutOrderNo("业务系统唯一编号");
//        //分账完成后,剩余金额自动解冻并返回给商户账号,默认false
//        profitSharingRequest.setUnfreezeUnsplit(true);
//        //待分账金额1元
//        Long money = 1L;
//        List<ProfitSharingReceiver> profitSharingReceivers = new ArrayList<>();
//        ProfitSharingReceiver profitSharingReceiver = new ProfitSharingReceiver();
//        profitSharingReceiver.setAccount("appid对应的openId,分账用户1");
//
//
//        //分账百分之5
//        profitSharingReceiver.setAmount(money * 100 / 5);
//        profitSharingReceiver.setAppid(appId);
//        profitSharingReceiver.setType("PERSONAL_OPENID");
//        profitSharingReceiver.setRelationType("PARTNER");
//        profitSharingReceiver.setDescription("test01");
//        profitSharingReceivers.add(profitSharingReceiver);
//
//        ProfitSharingReceiver receiver = new ProfitSharingReceiver();
//        receiver.setAccount("appid对应的openId,分账用户2");
//        //百分之10
//        receiver.setAmount(money * 100 / 10);
//        receiver.setAppid(appId);
//        receiver.setType("PERSONAL_OPENID");
//        receiver.setRelationType("PARTNER");
//        receiver.setDescription("test02");
//        profitSharingReceivers.add(receiver);
//
//
//        profitSharingRequest.setReceivers(profitSharingReceivers);
//
//        profitSharingV3Service.profitSharing(profitSharingRequest);
//
//
//
//
////                    Map<String,String> headers = new HashMap<>();
////                    headers.put("Authorization",map.get("sign"));
////                    headers.put("Accept","application/json");
////                    headers.put("Wechatpay-Serial",certPath);
////
////                    List<Receivers> receivers = new ArrayList<>();
////
////                    Map<String,Object> body = new HashMap<>();
////                    body.put("appid",appid);
////                    body.put("transaction_id",map.get("transaction_id"));
////                    body.put("out_order_no",map.get("out_trade_no"));
////                    body.put("receivers",receivers);
////                    body.put("unfreeze_unsplit",true);
//
//                    //支付分账
////                    String url ="https://api.mch.weixin.qq.com/v3/profitsharing/orders";
////                    CloseableHttpResponse closeableHttpResponse = HttpClientUtil.setPostHttpRequset(url, body, headers, "application/json");
////
//
//            return  null;
//
//
//
//
//    }
    /**
     * 微信扫码收款
     *
     * @param body         商品描述
     * @param attach       附加数据
     * @param nonce_str    随机字符串
     * @param out_trade_no 商户订单号
     * @param total_fee    订单金额
     * @param auth_code    授权码    扫码支付授权码,设备读取用户微信中的条码或者二维码信息(注:用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头)
     * @return
     */
    public ResultUtil wxScanQRCodePay(String body, String attach, String nonce_str, String out_trade_no, String total_fee, String auth_code) {
        int i = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
        String hostAddress = null;
        try {
            InetAddress address = InetAddress.getLocalHost();
            hostAddress = address.getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        String randomCode = null;
        try {
            randomCode = UUIDUtil.getRandomCode(10);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Map<String, Object> map = new HashMap<>();
        map.put("appid", appid);
        map.put("mch_id", mchId);
        map.put("nonce_str", nonce_str);//存储的支付人员id,员工扫描二维码支付的时候存储的是收款员工id
        map.put("body", body);
        map.put("attach", attach);//存储的费用月份数据,员工扫描二维码支付的时候存储的是收费项id
        map.put("out_trade_no", randomCode + "_" + out_trade_no);//存储的房间id
        map.put("total_fee", i);
        map.put("spbill_create_ip", hostAddress);
        map.put("auth_code", auth_code);
        String s = this.weixinSignature(map);
        map.put("sign", s);
        String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
        //设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        StringBuffer xmlString = new StringBuffer();
        Set<String> strings = map.keySet();
        String[] keys = {};
        keys = strings.toArray(keys);
        Arrays.sort(keys);
        xmlString.append("<xml>");
        for (int l = 0; l < keys.length; l++) {
            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
        }
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String body1 = null;
        try {
            body1 = HttpClientUtil.pushHttpRequsetXml(url, xmlString.toString(), new HashMap<>()).getData();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[", "");
        body1 = body1.replaceAll("]]>", "");
        try {
            map1 = this.xmlToMap(body1, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        String return_code = map1.get("return_code");
        if ("SUCCESS".equals(return_code)) {
            String result_code = map1.get("result_code");
            if ("SUCCESS".equals(result_code)) {
                String type = map1.get("trade_type");
                switch (type) {
                    case "JSAPI":
                        break;
                    case "NATIVE":
                        String code_url = map1.get("code_url");
                        return ResultUtil.success(code_url);
                    case "APP":
                        String prepay_id = map1.get("prepay_id");
                        //重新进行签名后返回给前端
                        Map<String, Object> map2 = new HashMap<>();
                        map2.put("appid", appid);
                        map2.put("noncestr", nonce_str);
                        map2.put("package", "Sign=WXPay");
                        map2.put("partnerid", mchId);
                        map2.put("prepayid", prepay_id);
                        map2.put("timestamp", new Date().getTime() + "");
                        String s1 = this.weixinSignature(map2);
                        map2.put("pac", "Sign=WXPay");
                        map2.put("sign", s1);
//                      System.err.println(map2);
                        return ResultUtil.success(map2);
                }
                return null;
            } else {
//                System.err.println(map1.get("err_code_des"));
                return ResultUtil.error(map1.get("err_code_des"));
            }
        } else {
//            System.err.println(map1.get("return_msg") + appid + "----" + mchId);
            return ResultUtil.error(map1.get("return_msg"), new JSONObject());
        }
    }
    /**
     * 支付宝扫码收款
     *
     * @param data
     * @return
     */
    public Object aliScanQRCodePay(String data) {
        return null;
    }
    /**
     * 微信退款申请
     *
     * @param transaction_id 微信订单号。微信生成的订单号,在支付通知中有返回
     * @param out_refund_no  商户退款单号。商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
     * @param total_fee      订单金额。订单总金额,单位为分,只能为整数
     * @param refund_fee     退款金额。退款总金额,订单总金额,单位为分,只能为整数
     * @param notify_url     退款结果通知url。异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数 如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效。
     * @return
     */
    public Map<String, String> wxRefund(String transaction_id, String out_refund_no, String total_fee, String refund_fee, String notify_url) {
        int tf = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
        int rf = new BigDecimal(refund_fee).multiply(new BigDecimal("100")).intValue();
        String nonce_str = UUIDUtil.getRandomCode();
        Map<String, Object> map = new HashMap<>();
        map.put("appid", appid);
        map.put("mch_id", mchId);
        map.put("nonce_str", nonce_str);
        map.put("transaction_id", transaction_id);
        map.put("out_refund_no", out_refund_no);
        map.put("total_fee", tf);
        map.put("refund_fee", rf);
        map.put("notify_url", callbackPath + notify_url);
        String s = this.weixinSignature(map, key);
        map.put("sign", s);
        String url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
        //设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        StringBuffer xmlString = new StringBuffer();
        Set<String> strings = map.keySet();
        String[] keys = {};
        keys = strings.toArray(keys);
        Arrays.sort(keys);
        xmlString.append("<xml>");
        for (int l = 0; l < keys.length; l++) {
            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
        }
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String body1 = null;
        try {
            body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12");
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.err.println(body1);
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[", "");
        body1 = body1.replaceAll("]]>", "");
        try {
            map1 = this.xmlToMap(body1, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        String return_code = map1.get("return_code");
        Map<String, String> map2 = new HashMap<>();
        if ("SUCCESS".equals(return_code)) {
            String result_code = map1.get("result_code");
            if ("SUCCESS".equals(result_code)) {
                map2.put("return_code", result_code);
                map2.put("refund_id", String.valueOf(map1.get("refund_id")));//微信退款订单号
                map2.put("refund_fee", String.valueOf(map1.get("refund_fee")));//退款金额
                return map2;
            } else {
                map2.put("return_code", result_code);
                map2.put("return_msg", map1.get("err_code_des"));
                return map2;
            }
        } else {
            map2.put("return_code", return_code);
            map2.put("return_msg", map1.get("return_msg"));
            return map2;
        }
    }
    /**
     * 微信退款成功后的回调处理
     *
     * @param request
     * @return
     */
    public Map<String, String> wxRefundCallback(HttpServletRequest request) {
        try {
            String param = this.getParam(request);
            param = param.replaceAll("<!\\[CDATA\\[", "");
            param = param.replaceAll("]]>", "");
            Map<String, String> map = this.xmlToMap(param, "UTF-8");
            String return_code = map.get("return_code");
            if ("SUCCESS".equals(return_code)) {
                String req_info = map.get("req_info");//加密信息请用商户秘钥进行解密
                String s = this.wxDecrypt(req_info);
                s = s.replaceAll("<!\\[CDATA\\[", "");
                s = s.replaceAll("]]>", "");
                map = this.xmlToMap(s, "UTF-8");
                Map<String, String> map1 = new HashMap<>();
                map1.put("refund_id", map.get("refund_id"));
                map1.put("out_refund_no", map.get("out_refund_no"));
                String result = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                map1.put("result", result);
                return map1;
            } else {
//                System.err.println(map.get("return_msg"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 支付宝退款
     *
     * @param trade_no      支付宝交易号
     * @param refund_amount 退款金额
     * @return
     * @throws AlipayApiException
     */
    public Map<String, String> aliRefund(String trade_no, String refund_amount) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("trade_no", trade_no);
        jsonObject.put("refund_amount", refund_amount);
        request.setBizContent(jsonObject.toJSONString());
        AlipayTradeRefundResponse response = alipayClient.execute(request);
        Map<String, String> map = new HashMap<>();
        if (response.isSuccess()) {
            System.out.println("调用成功");
            String outTradeNo = response.getOutTradeNo();
            map.put("code", response.getCode());//10000
            map.put("trade_no", response.getTradeNo());//支付宝交易号
            map.put("out_trade_no", outTradeNo);//商户订单号
        } else {
            System.out.println("调用失败");
            map.put("code", response.getCode());
            map.put("msg", response.getSubMsg());
        }
        return map;
    }
    /**
     * 查询微信支付订单
     *
     * @return
     * @throws Exception
     */
    public ResultUtil<Map<String, String>> queryWXOrder(String out_trade_no, String transaction_id) throws Exception {
        String url = "https://api.mch.weixin.qq.com/pay/orderquery";
        String nonce_str = UUIDUtil.getRandomCode(16);
        Map<String, Object> map = new HashMap<>();
        map.put("appid", appid);
        map.put("mch_id", mchId);
        map.put("out_trade_no", out_trade_no);//商户订单号
        map.put("transaction_id", transaction_id);//微信订单号
        map.put("nonce_str", nonce_str);//随机字符串
        String s = this.weixinSignature(map);
        map.put("sign", s);
        //设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        StringBuffer xmlString = new StringBuffer();
        Set<String> strings = map.keySet();
        String[] keys = {};
        keys = strings.toArray(keys);
        Arrays.sort(keys);
        xmlString.append("<xml>");
        for (int l = 0; l < keys.length; l++) {
            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
        }
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String body1 = HttpClientUtil.pushHttpRequsetXml(url, xmlString.toString(), new HashMap<>()).getData();
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[", "");
        body1 = body1.replaceAll("]]>", "");
        try {
            map1 = this.xmlToMap(body1, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        String return_code = map1.get("return_code");
        if ("SUCCESS".equals(return_code)) {
            String result_code = map1.get("result_code");
            if ("SUCCESS".equals(result_code)) {
                Map<String, String> map2 = new HashMap<>();
                map2.put("trade_type", map1.get("trade_type"));
                map2.put("trade_state", map1.get("trade_state"));//订单状态SUCCESS—支付成功,REFUND—转入退款,NOTPAY—未支付,CLOSED—已关闭,REVOKED—已撤销(刷卡支付),USERPAYING--用户支付中,PAYERROR--支付失败(其他原因,如银行返回失败)
                map2.put("transaction_id", map1.get("transaction_id"));
                return ResultUtil.success(map2);
            } else {
                System.err.println(map1.get("err_code_des"));
                return ResultUtil.error(map1.get("err_code_des"));
            }
        } else {
            System.err.println(map1.get("return_msg") + appid + "----" + mchId);
            return ResultUtil.error(map1.get("return_msg"));
        }
    }
    /**
     * 微信转账功能(企业付款到零钱)
     *
     * @param openid           商户appid下,某用户的openid
     * @param desc             企业付款备注,必填。
     * @param total_fee        企业付款金额
     * @param partner_trade_no 商户订单号,需保持唯一性
     * @return
     */
    public Map<String, String> wxTransfers(String openid, String desc, String total_fee, String partner_trade_no) throws Exception {
        int amount = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
        String nonce_str = UUIDUtil.getRandomCode();
        Map<String, Object> map = new HashMap<>();
        map.put("mch_appid", appid);//申请商户号的appid或商户号绑定的appid
        map.put("mchid", mchId);//微信支付分配的商户号
        map.put("nonce_str", nonce_str);//随机字符串,不长于32位
        map.put("partner_trade_no", partner_trade_no);//商户订单号,需保持唯一性
        map.put("openid", openid);//商户appid下,某用户的openid
        map.put("check_name", "NO_CHECK");//NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
        map.put("amount", amount);//企业付款金额,单位为分
        map.put("desc", desc);//企业付款备注,必填。
        String s = this.weixinSignature(map, key);
        map.put("sign", s);
        String url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
        //设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        StringBuffer xmlString = new StringBuffer();
        Set<String> strings = map.keySet();
        String[] keys = {};
        keys = strings.toArray(keys);
        Arrays.sort(keys);
        xmlString.append("<xml>");
        for (int l = 0; l < keys.length; l++) {
            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
        }
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12");
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[", "");
        body1 = body1.replaceAll("]]>", "");
        try {
            map1 = this.xmlToMap(body1, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        String return_code = map1.get("return_code");
        Map<String, String> map2 = new HashMap<>();
        if ("SUCCESS".equals(return_code)) {
            String result_code = map1.get("result_code");
            if ("SUCCESS".equals(result_code)) {
                map2.put("return_code", result_code);
                map2.put("payment_no", String.valueOf(map1.get("payment_no")));//付款订单号
                map2.put("payment_time", String.valueOf(map1.get("payment_time")));//付款时间
                return map2;
            } else {
                map2.put("return_code", result_code);
                map2.put("err_code", map1.get("err_code"));
                map2.put("err_code_des", map1.get("err_code_des"));
                return map2;
            }
        } else {
            map2.put("return_code", return_code);
            map2.put("return_msg", map1.get("return_msg"));
            return map2;
        }
    }
    /**
     * 微信转账功能(企业付款到银行卡)
     *
     * @param desc             备注信息
     * @param total_fee        转账金额
     * @param partner_trade_no 订单号
     * @param enc_bank_no      银行卡号
     * @param enc_true_name    收款方用户名
     * @param bankName         银行名称
     * @return
     * @throws Exception
     */
    public Map<String, String> wxPayBank(String desc, String total_fee, String partner_trade_no, String enc_bank_no, String enc_true_name, String bankName) throws Exception {
        int amount = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
        String nonce_str = UUIDUtil.getRandomCode();
        Map<String, Object> map = new HashMap<>();
        map.put("mch_id", mchId);//微信支付分配的商户号
        map.put("nonce_str", nonce_str);//随机字符串,不长于32位
        map.put("partner_trade_no", partner_trade_no);//商户订单号,需保持唯一性
        map.put("enc_bank_no", enc_bank_no);//收款方银行卡号(采用标准RSA算法,公钥由微信侧提供)
        map.put("enc_true_name", enc_true_name);//收款方用户名(采用标准RSA算法,公钥由微信侧提供)
        map.put("bank_code", findBankCode(bankName));//
        map.put("amount", amount);//企业付款金额,单位为分
        map.put("desc", desc);//企业付款备注,必填。
        String s = this.weixinSignature(map, key);
        map.put("sign", s);
        String url = "https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank";
        //设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        StringBuffer xmlString = new StringBuffer();
        Set<String> strings = map.keySet();
        String[] keys = {};
        keys = strings.toArray(keys);
        Arrays.sort(keys);
        xmlString.append("<xml>");
        for (int l = 0; l < keys.length; l++) {
            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
        }
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12");
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[", "");
        body1 = body1.replaceAll("]]>", "");
        try {
            map1 = this.xmlToMap(body1, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        String return_code = map1.get("return_code");
        Map<String, String> map2 = new HashMap<>();
        if ("SUCCESS".equals(return_code)) {
            String result_code = map1.get("result_code");
            if ("SUCCESS".equals(result_code)) {
                map2.put("return_code", result_code);
                map2.put("payment_no", String.valueOf(map1.get("payment_no")));//付款订单号
                map2.put("cmms_amt", String.valueOf(map1.get("cmms_amt")));//手续费金额 RMB:分
                return map2;
            } else {
                map2.put("return_code", result_code);
                map2.put("err_code", map1.get("err_code"));
                map2.put("err_code_des", map1.get("err_code_des"));
                return map2;
            }
        } else {
            map2.put("return_code", return_code);
            map2.put("return_msg", map1.get("return_msg"));
            return map2;
        }
    }
    /**
     * 微信转账到银行卡不编号
     *
     * @param bankName
     * @return
     */
    public String findBankCode(String bankName) {
        String json = "{\"工商银行 \":1002,\"农业银行\":1005,\"建设银行\":1003,\"中国银行\":1026,\"交通银行 \":1020,\"招商银行 \":1001,\"邮储银行\":1066,\"民生银行 \":1006,\"平安银行 \":1010,\"中信银行\":1021,\"浦发银行 \":1004,\"兴业银行 \":1009,\"光大银行 \":1022,\"广发银行\":1027,\"华夏银行\":1025,\"宁波银行\":1056,\"北京银行\":4836,\"上海银行\":1024,\"南京银行\":1054,\"长子县融汇村镇银行\":4755,\"长沙银行\":4216,\"浙江泰隆商业银行\":4051,\"中原银行 \":4753,\"企业银行(中国)\":4761,\"顺德农商银行 \":4036,\"衡水银行\":4752,\"长治银行\":4756,\"大同银行\":4767,\"河南省农村信用社\":4115,\"宁夏黄河农村商业银行\":4150,\"山西省农村信用社\":4156,\"安徽省农村信用社\":4166,\"甘肃省农村信用社\":4157,\"天津农村商业银行\":4153,\"广西壮族自治区农村信用社\":4113,\"陕西省农村信用社\":4108,\"深圳农村商业银行\":4076,\"宁波鄞州农村商业银行\":4052,\"浙江省农村信用社联合社\":4764,\"江苏省农村信用社联合社\":4217,\"江苏紫金农村商业银行股份有限公司 \":4072,\"北京中关村银行股份有限公司 \":4769,\"星展银行( 中国) 有限公司 \":4778,\"枣庄银行股份有限公司 \":4766,\"海口联合农村商业银行股份有限公司 \":4758,\"南洋商业银行( 中国) 有限公司 \":4763}";
        JSONObject jsonObject = JSON.parseObject(json);
        Set<String> strings = jsonObject.keySet();
        for (String key : strings) {
            if (key.indexOf(bankName) >= 0) {
                return jsonObject.getString(key);
            }
        }
        return "";
    }
    /**
     * 支付宝转账
     *
     * @param out_biz_no   商家侧唯一订单号,由商家自定义。对于不同转账请求,商家需保证该订单号在自身系统唯一。
     * @param trans_amount 订单总金额,单位为元,精确到小数点后两位
     * @param order_title  转账业务的标题,用于在支付宝用户的账单里显示
     * @param identity     参与方的唯一标识(收款方支付宝账号)
     * @param name         参与方真实姓名,如果非空,将校验收款支付宝账号姓名一致性。
     * @param remark       业务备注
     * @return
     * @throws Exception
     */
    public Map<String, Object> aliTransfer(String out_biz_no, Double trans_amount, String order_title, String identity, String name, String remark) throws Exception {
        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");  //gateway:支付宝网关(固定)https://openapi.alipay.com/gateway.do
        certAlipayRequest.setAppId(aliAppid);  //APPID 即创建应用后生成,详情见创建应用并获取 APPID
        certAlipayRequest.setPrivateKey(appPrivateKey);  //开发者应用私钥,由开发者自己生成
        certAlipayRequest.setFormat("json");  //参数返回格式,只支持 json 格式
        certAlipayRequest.setCharset("UTF-8");  //请求和签名使用的字符编码格式,支持 GBK和 UTF-8
        certAlipayRequest.setSignType("RSA2");  //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。
        certAlipayRequest.setCertPath(app_cert_path); //应用公钥证书路径(app_cert_path 文件绝对路径)
        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径)
        certAlipayRequest.setRootCertPath(alipay_root_cert_path);  //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径)
        AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
        AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
        request.setBizContent("{" +
                "\"out_biz_no\":\"" + out_biz_no + "\"," +
                "\"trans_amount\":" + trans_amount + "," +
                "\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," +
                "\"biz_scene\":\"DIRECT_TRANSFER\"," +
                "\"order_title\":\"" + order_title + "\"," +
                "\"payee_info\":{" +
                "\"identity\":\"" + identity + "\"," +
                "\"identity_type\":\"ALIPAY_USER_ID\"," +
                "\"name\":\"" + name + "\"," +
                "}," +
                "\"remark\":\"" + remark + "\"" +
                "}");
        AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
        Map<String, Object> map = new HashMap<>();
        if (response.isSuccess()) {
            String status = response.getStatus();
            if (status.equals("SUCCESS")) {//成功
                map.put("code", response.getCode());
                map.put("order_id", response.getOrderId());//支付宝订单号
                map.put("pay_fund_order_id", response.getPayFundOrderId());//支付宝流水号
            } else {
                map.put("code", response.getCode());
                map.put("sub_msg", response.getSubMsg());
            }
        } else {
            map.put("code", response.getSubCode());
            map.put("sub_msg", response.getSubMsg());
        }
        return map;
    }
    /**
     * 获取请求内容
     *
     * @param request
     * @return
     * @throws IOException
     */
    private String getParam(HttpServletRequest request) throws IOException {
        // 读取参数
        InputStream inputStream;
        StringBuilder sb = new StringBuilder();
        inputStream = request.getInputStream();
        String s;
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
        while ((s = in.readLine()) != null) {
            sb.append(s);
        }
        in.close();
        inputStream.close();
        return sb.toString();
    }
    /**
     * 微信下单的签名算法
     *
     * @param map
     * @return
     */
    private String weixinSignature(Map<String, Object> map) {
        try {
            Set<Map.Entry<String, Object>> entries = map.entrySet();
            List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
            Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
                public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
                    return (o1.getKey()).toString().compareTo(o2.getKey());
                }
            });
            // 构造签名键值对的格式
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, Object> item : infoIds) {
                if (item.getKey() != null || item.getKey() != "") {
                    String key = item.getKey();
                    Object val = item.getValue();
                    if (!(val == "" || val == null)) {
                        sb.append(key + "=" + val + "&");
                    }
                }
            }
            sb.append("key=" + key);
            String sign = MD5AndKL.MD5Encode(sb.toString(), "UTF-8").toUpperCase(); //注:MD5签名方式
            return sign;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 微信下单的签名算法
     *
     * @param map
     * @return
     */
    private String weixinSignature(Map<String, Object> map, String key_) {
        try {
            Set<Map.Entry<String, Object>> entries = map.entrySet();
            List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
            Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
                public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
                    return (o1.getKey()).toString().compareTo(o2.getKey());
                }
            });
            // 构造签名键值对的格式
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, Object> item : infoIds) {
                if (item.getKey() != null || item.getKey() != "") {
                    String key = item.getKey();
                    Object val = item.getValue();
                    if (!(val == "" || val == null)) {
                        sb.append(key + "=" + val + "&");
                    }
                }
            }
            sb.append("key=" + key_);
            String sign = MD5AndKL.MD5Encode(sb.toString(), "UTF-8").toUpperCase(); //注:MD5签名方式
            return sign;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 微信退款成功后的解密
     *
     * @param req_info
     * @return
     */
    private String wxDecrypt(String req_info) throws NoSuchPaddingException, NoSuchAlgorithmException, NoSuchProviderException,
            InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        byte[] decode = Base64.getDecoder().decode(req_info);
        String sign = MD5AndKL.MD5Encode(key, "UTF-8").toLowerCase();
        if (Security.getProvider("BC") == null) {
            Security.addProvider(new BouncyCastleProvider());
        }
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
        SecretKeySpec secretKeySpec = new SecretKeySpec(sign.getBytes(), "AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        return new String(cipher.doFinal(decode));
    }
//    public static void main(String[] ages){
//        PayMoneyUtil payMoneyUtil = new PayMoneyUtil();
//        ResultUtil ce = payMoneyUtil.alipay("测试", "测试", "", "121456457", "10", "http://123.com");
//        System.err.println(ce);
//        ResultUtil resultUtil = null;
//        try {
//            resultUtil = payMoneyUtil.queryALIOrder("121456457");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        System.err.println(resultUtil);
//    }
    /**
     * xml转map
     *
     * @param xml
     * @param charset
     * @return
     * @throws UnsupportedEncodingException
     * @throws DocumentException
     */
    public static Map<String, String> xmlToMap(String xml, String charset) throws UnsupportedEncodingException, DocumentException {
        Map<String, String> respMap = new HashMap<String, String>();
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new ByteArrayInputStream(xml.getBytes(charset)));
        Element root = doc.getRootElement();
        xmlToMap(root, respMap);
        return respMap;
    }
    public static Map<String, String> xmlToMap(Element tmpElement, Map<String, String> respMap) {
        if (tmpElement.isTextOnly()) {
            respMap.put(tmpElement.getName(), tmpElement.getText());
            return respMap;
        }
        @SuppressWarnings("unchecked")
        Iterator<Element> eItor = tmpElement.elementIterator();
        while (eItor.hasNext()) {
            Element element = eItor.next();
            xmlToMap(element, respMap);
        }
        return respMap;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ResultUtil.java
@@ -17,9 +17,15 @@
    public static final Integer ERROR = 500;
    // 手机号被冻结
    public static final Integer ERROR_Login = 501;
    public static final Integer ERROR_Login = 503;
    // 同一年内最多五部手机号登录
    public static final Integer ERROR_DEVICE = 504;
    // 用户发布数量超限
    public static final Integer ERROR_ADD = 502;
    // 邀请码无效
    public static final Integer ERROR_INVITE = 505;
    // 用户不是首次训练 不需要弹出运动风险告知
    public static final Integer TRAIN = 201;
    public static final Integer TOKEN_ERROR = 600;
@@ -82,12 +88,23 @@
    public static ResultUtil error(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, new Object());
    }
    /**
     * 登录错误信息 当前手机号被冻结
     * @return
     */
    public static ResultUtil errorLogin(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR_Login, mag, new Object());
    public static<T> ResultUtil<T> errorLogin(String mag, T obj){
        return ResultUtil.getResult(ResultUtil.ERROR_Login, mag, obj);
    }
    /**
     * 登录错误信息 当前手机号被冻结
     * @return
     */
    public static <T> ResultUtil<T> errorDevice(String mag,T obj){
        return ResultUtil.getResult(ResultUtil.ERROR_DEVICE, mag, obj);
    }
    public static <T> ResultUtil<T> errorInvite(String mag,T obj){
        return ResultUtil.getResult(ResultUtil.ERROR_INVITE, mag, obj);
    }
    /**
     * 发布错误信息 当前用户发布条数已经超过三条
@@ -171,6 +188,9 @@
    public static ResultUtil success(){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new Object());
    }
    public static ResultUtil train(){
        return ResultUtil.getResult(ResultUtil.TRAIN, "SUCCESS", new Object());
    }
    /**
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UploadVideoUtil.java
New file
@@ -0,0 +1,204 @@
package com.stylefeng.guns.modular.system.util;
import java.util.Map;
import java.io.InputStream;
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class UploadVideoUtil {
    public String getUploadId(){
        // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。
        // String securityToken = System.getenv("SECURITY_TOKEN");
        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
        // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。
        //String endPoint = System.getenv("ENDPOINT");
        // 创建ObsClient实例
        // 使用永久AK/SK初始化客户端
        ObsClient obsClient = new ObsClient(ak, sk, endPoint);
        // 使用临时AK/SK和SecurityToken初始化客户端
        // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint);
        try {
            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("jkjianshen", "jk");
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.addUserMetadata("property", "property-value");
            metadata.setContentType("text/plain");
            request.setMetadata(metadata);
            InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request);
            String uploadId = result.getUploadId();
            System.out.println("initiateMultipartUpload successfully");
            System.out.println("uploadId:" + uploadId);
            return uploadId;
        } catch (ObsException e) {
            System.out.println("initiateMultipartUpload failed");
            // 请求失败,打印http状态码
            System.out.println("HTTP Code:" + e.getResponseCode());
            // 请求失败,打印服务端错误码
            System.out.println("Error Code:" + e.getErrorCode());
            // 请求失败,打印详细错误信息
            System.out.println("Error Message:" + e.getErrorMessage());
            // 请求失败,打印请求id
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("initiateMultipartUpload failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
        return null;
    }
    public String uploadVideo(File file){
// 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。
        String securityToken = System.getenv("SECURITY_TOKEN");
        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
        ObsClient obsClient = new ObsClient(ak, sk,endPoint);
        try {
            String uploadId = "upload id from initiateMultipartUpload";
            List<PartEtag> partEtags = new ArrayList<PartEtag>();
            // 上传第一段
            UploadPartRequest request = new UploadPartRequest("jkjianshen", "jk");
            // 设置Upload ID
            request.setUploadId(uploadId);
            // 设置分段号,范围是1~10000,
            request.setPartNumber(1);
            // 设置将要上传的大文件
            request.setFile(file);
            // 设置分段大小
            request.setPartSize(5 * 1024 * 1024L);
            UploadPartResult result = obsClient.uploadPart(request);
            partEtags.add(new PartEtag(result.getEtag(), result.getPartNumber()));
            // 上传第二段
            request = new UploadPartRequest("jkjianshen", "jk");
            // 设置Upload ID
            request.setUploadId(uploadId);
            // 设置分段号
            request.setPartNumber(2);
            // 设置将要上传的大文件
            request.setFile(new File("localfile"));
            // 设置第二段的段偏移量
            request.setOffset(5 * 1024 * 1024L);
            // 设置分段大小
            request.setPartSize(5 * 1024 * 1024L);
            result = obsClient.uploadPart(request);
            partEtags.add(new PartEtag(result.getEtag(), result.getPartNumber()));
            System.out.println("uploadPart successfully");
        } catch (ObsException e) {
            System.out.println("uploadPart failed");
            // 请求失败,打印http状态码
            System.out.println("HTTP Code:" + e.getResponseCode());
            // 请求失败,打印服务端错误码
            System.out.println("Error Code:" + e.getErrorCode());
            // 请求失败,打印详细错误信息
            System.out.println("Error Message:" + e.getErrorMessage());
            // 请求失败,打印请求id
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("uploadPart failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
        return null;
    }
    public String compelete(String uploadId1){
        // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = "DRJFJRVQ9KVLQUSJUROI";
        String sk = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。
        String securityToken = System.getenv("SECURITY_TOKEN");
        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
        String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
        // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。
        //String endPoint = System.getenv("ENDPOINT");
        // 创建ObsClient实例
        // 使用永久AK/SK初始化客户端
        ObsClient obsClient = new ObsClient(ak, sk,endPoint);
        // 使用临时AK/SK和SecurityToken初始化客户端
        // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint);
        try {
            String uploadId = uploadId1;
            List<PartEtag> partEtags = new ArrayList<PartEtag>();
            // 第一段
            PartEtag part1 = new PartEtag();
            part1.setPartNumber(1);
            part1.seteTag("etag1");
            partEtags.add(part1);
            // 第二段
            PartEtag part2 = new PartEtag();
            part2.setPartNumber(2);
            part2.setEtag("etag2");
            partEtags.add(part2);
            CompleteMultipartUploadRequest request =
                    new CompleteMultipartUploadRequest("jkjianshen", "jk", uploadId, partEtags);
            CompleteMultipartUploadResult completeMultipartUploadResult = obsClient.completeMultipartUpload(request);
            String bucketName = completeMultipartUploadResult.getBucketName();
            String objectKey = completeMultipartUploadResult.getObjectKey();
            String etag = completeMultipartUploadResult.getEtag();
            String location = completeMultipartUploadResult.getLocation();
            String versionId = completeMultipartUploadResult.getVersionId();
            String objectUrl = completeMultipartUploadResult.getObjectUrl();
            String encodingType = completeMultipartUploadResult.getEncodingType();
            InputStream callbackResponseBody = completeMultipartUploadResult.getCallbackResponseBody();
            Map<String, Object> responseHeaders = completeMultipartUploadResult.getResponseHeaders();
            Map<String, Object> originalHeaders = completeMultipartUploadResult.getOriginalHeaders();
            String requestId = completeMultipartUploadResult.getRequestId();
            int statusCode = completeMultipartUploadResult.getStatusCode();
            System.err.println("bucketName=========="+bucketName);
            System.err.println("objectKey=========="+objectKey);
            System.err.println("etag=========="+etag);
            System.err.println("location=========="+location);
            System.err.println("versionId=========="+versionId);
            System.err.println("objectUrl=========="+objectUrl);
            System.err.println("encodingType=========="+encodingType);
            System.err.println("callbackResponseBody=========="+callbackResponseBody);
            System.err.println("responseHeaders=========="+responseHeaders);
            System.err.println("originalHeaders=========="+originalHeaders);
            System.err.println("requestId=========="+requestId);
            System.err.println("statusCode=========="+statusCode);
            System.out.println("completeMultipartUpload successfully");
        } catch (ObsException e) {
            System.out.println("CompleteMultipartUpload failed");
            // 请求失败,打印http状态码
            System.out.println("HTTP Code:" + e.getResponseCode());
            // 请求失败,打印服务端错误码
            System.out.println("Error Code:" + e.getErrorCode());
            // 请求失败,打印详细错误信息
            System.out.println("Error Message:" + e.getErrorMessage());
            // 请求失败,打印请求id
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("completeMultipartUpload failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/httpClinet/HttpClientUtil.java
@@ -39,10 +39,10 @@
    private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
    private PoolingHttpClientConnectionManager connectionManager;
    private static PoolingHttpClientConnectionManager connectionManager;
    public HttpClientUtil(){
    {
        //1.创建连接池管理器
        connectionManager = new PoolingHttpClientConnectionManager(60000,
                TimeUnit.MILLISECONDS);
@@ -53,14 +53,14 @@
    /**
     * 创建一个httpClient对象
     */
    private CloseableHttpClient getHttpCline(){
        return  HttpClients.custom()
    private static CloseableHttpClient getHttpCline() {
        return HttpClients.custom()
                .setConnectionManager(connectionManager)
                .disableAutomaticRetries()
                .build();
    }
    private RequestConfig getRequestConfig(){
    private static RequestConfig getRequestConfig() {
        RequestConfig.Builder builder = RequestConfig.custom();
        builder.setSocketTimeout(60000)//3.1设置客户端等待服务端返回数据的超时时间
                .setConnectTimeout(30000)//3.2设置客户端发起TCP连接请求的超时时间
@@ -70,34 +70,34 @@
    }
    /**
     * 创建一个POST请求实例
     * @param url       请求地址
     * @param params    请求参数
     *
     * @param url    请求地址
     * @param params 请求参数
     */
    private CloseableHttpResponse setPostHttpRequset(String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception{
    public static CloseableHttpResponse setPostHttpRequset(String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        httpPost.setConfig(this.getRequestConfig());
        if(null != header){
            for(String key : header.keySet()){
        httpPost.setConfig(getRequestConfig());
        if (null != header) {
            for (String key : header.keySet()) {
                httpPost.setHeader(key, header.get(key));
            }
        }
        List<NameValuePair> list = new ArrayList<>();
        if(null != params){
        if (null != params) {
            Set<String> keys = params.keySet();
            for(String key : keys){
            for (String key : keys) {
                list.add(new BasicNameValuePair(key, null == params.get(key) ? null : params.get(key).toString()));
            }
        }
        switch (contentType){
        switch (contentType) {
            case "form":
                httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
                break;
            case "json":
                ObjectMapper objectMapper = new ObjectMapper();
                String s =objectMapper.writeValueAsString(params);
                String s = objectMapper.writeValueAsString(params);
                httpPost.setEntity(new StringEntity(s, ContentType.create(ContentType.APPLICATION_JSON.getMimeType(), Charset.forName("UTF-8"))));
                break;
        }
@@ -107,23 +107,24 @@
    /**
     * 获取get请求实例
     * @param url       请求地址
     * @param params    请求参数
     *
     * @param url    请求地址
     * @param params 请求参数
     */
    private CloseableHttpResponse setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header) throws Exception{
    private static CloseableHttpResponse setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header) throws Exception {
        StringBuffer sb = new StringBuffer();
        String p = "";
        if(null != params){
        if (null != params) {
            Set<String> keys = params.keySet();
            for(String key : keys){
            for (String key : keys) {
                sb.append(key + "=" + params.get(key) + "&");
            }
            p = "?" + sb.substring(0, sb.length() - 1);
        }
        HttpGet httpGet = new HttpGet(url + p);
        httpGet.setConfig(getRequestConfig());
        if(null != header){
            for(String key : header.keySet()){
        if (null != header) {
            for (String key : header.keySet()) {
                httpGet.setHeader(key, header.get(key));
            }
        }
@@ -133,21 +134,22 @@
    /**
     * 发送http请求
     * @param mothed        "GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS"
     * @param url           请求地址
     * @param params        请求参数
     * @param header        请求头
     * @param contentType   参数请求方式form/json
     *
     * @param mothed      "GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS"
     * @param url         请求地址
     * @param params      请求参数
     * @param header      请求头
     * @param contentType 参数请求方式form/json
     * @return
     */
    public HttpResult pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception{
    public static HttpResult pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception {
        String randome = UUID.randomUUID().toString();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
        logger.info(sdf.format(new Date()) + "----(" + randome + ")请求参数:" + JSON.toJSONString(params));
        CloseableHttpResponse httpResponse = null;
        switch (mothed){
        switch (mothed) {
            case "GET":
                httpResponse = this.setGetHttpRequset(url, params, header);
                httpResponse = setGetHttpRequset(url, params, header);
                break;
            case "POST":
                httpResponse = setPostHttpRequset(url, params, header, contentType);
@@ -157,43 +159,23 @@
        String content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
        logger.info(sdf.format(new Date()) + "----(" + randome + ")返回结果:" + content);
        HttpResult httpResult = HttpResult.getHttpResult(statusCode, content);
        this.close(httpResponse);
        close(httpResponse);
        return httpResult;
    }
    public HttpResult pushJsonRequset(String url, String json) throws Exception{
        String randome = UUID.randomUUID().toString();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
        logger.info(sdf.format(new Date()) + "----(" + randome + ")请求参数:" + json);
        HttpPost httpPost = new HttpPost(url);
        httpPost.setConfig(this.getRequestConfig());
        httpPost.setEntity(new StringEntity(json, ContentType.create(ContentType.APPLICATION_JSON.getMimeType(), Charset.forName("UTF-8"))));
        CloseableHttpResponse httpResponse = getHttpCline().execute(httpPost);
        int statusCode = httpResponse.getStatusLine().getStatusCode();
        String content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
        logger.info(sdf.format(new Date()) + "----(" + randome + ")返回结果:" + content);
        HttpResult httpResult = HttpResult.getHttpResult(statusCode, content);
        this.close(httpResponse);
        return httpResult;
    }
    /**
     * 发送XML请求
     * @param url       请求地址
     * @param xml       XML数据
     * @param header    自定义请求头
     *
     * @param url    请求地址
     * @param xml    XML数据
     * @param header 自定义请求头
     * @return
     */
    public HttpResult pushHttpRequsetXml(String url, String xml, Map<String, String> header) throws Exception{
    public static HttpResult pushHttpRequsetXml(String url, String xml, Map<String, String> header) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        httpPost.setConfig(getRequestConfig());
        for(String key : header.keySet()){
        for (String key : header.keySet()) {
            httpPost.setHeader(key, header.get(key));
        }
        httpPost.setHeader("Content-Type", "application/xml");
@@ -202,39 +184,39 @@
        int statusCode = httpResponse.getStatusLine().getStatusCode();
        String content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
        HttpResult httpResult = HttpResult.getHttpResult(statusCode, content);
        this.close(httpResponse);
        close(httpResponse);
        return httpResult;
    }
    /**
     * 请求https发送XML请求
     * @param url           接口路径
     * @param xml           内容
     * @param header        请求头
     * @param certPassword      证书密码
     * @param certPath      证书路径
     * @param certType      证书类型
     *
     * @param url          接口路径
     * @param xml          内容
     * @param header       请求头
     * @param certPassword 证书密码
     * @param certPath     证书路径
     * @param certType     证书类型
     * @return
     * @throws Exception
     */
    public String pushHttpsRequsetXml(String url, String xml, Map<String, String> header, String certPassword, String certPath, String certType) throws Exception{
    public static String pushHttpsRequsetXml(String url, String xml, Map<String, String> header, String certPassword, String certPath, String certType) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        for(String key : header.keySet()){
        for (String key : header.keySet()) {
            httpPost.setHeader(key, header.get(key));
        }
        httpPost.setHeader("Content-Type", "application/xml");
        httpPost.setEntity(new StringEntity(xml, "UTF-8"));
        CloseableHttpClient httpCline = this.initCert(certPassword, certPath, certType);
        CloseableHttpClient httpCline = initCert(certPassword, certPath, certType);
        CloseableHttpResponse httpResponse = httpCline.execute(httpPost);
        String content = null;
        if(httpResponse.getStatusLine().getStatusCode() == 200){
        if (httpResponse.getStatusLine().getStatusCode() == 200) {
            content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
        }else{
        } else {
            content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity());
        }
        this.close(httpResponse);
        close(httpResponse);
        httpCline.close();
        return content;
    }
@@ -242,12 +224,13 @@
    /**
     * 初始化https对象(带证书)
     * @param key       证书密码
     * @param certPath  证书路径
     * @param certType  证书类型
     *
     * @param key      证书密码
     * @param certPath 证书路径
     * @param certType 证书类型
     * @throws Exception
     */
    private CloseableHttpClient initCert(String key, String certPath, String certType) throws Exception {
    private static CloseableHttpClient initCert(String key, String certPath, String certType) throws Exception {
        KeyStore keyStore = KeyStore.getInstance(certType);
        InputStream inputStream = new FileInputStream(new File(certPath));
        try {
@@ -257,30 +240,29 @@
        }
        SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, key.toCharArray()).build();
        SSLConnectionSocketFactory sslsf =
                new SSLConnectionSocketFactory(sslcontext, new String[] {"TLSv1"}, null,
                new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null,
                        SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
        return HttpClients.custom().setSSLSocketFactory(sslsf).build();
    }
    /**
     * 关闭资源
     */
    private void close(CloseableHttpResponse httpResponse){
    private static void close(CloseableHttpResponse httpResponse) {
        try {
            if(null != httpResponse){
            if (null != httpResponse) {
                EntityUtils.consume(httpResponse.getEntity());//此处高能,通过源码分析,由EntityUtils是否回收HttpEntity
                httpResponse.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
        } finally {
            try {
                if(null != httpResponse){
                if (null != httpResponse) {
                    httpResponse.close();
                }
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/task/MyScheduledTask.java
New file
@@ -0,0 +1,27 @@
package com.stylefeng.guns.modular.system.util.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.modular.system.model.CouponReceive;
import com.stylefeng.guns.modular.system.service.ICouponReceiveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyScheduledTask {
@Autowired
private ICouponReceiveService couponReceiveService;
    @Scheduled(cron = "0 0 0 * * ?") // 每隔60秒执行一次
    public void myTask() {
        EntityWrapper<CouponReceive> wrapper = new EntityWrapper<>();
        wrapper.le("endTime",new Date());
        for (CouponReceive couponReceive : couponReceiveService.selectList(wrapper)) {
            couponReceive.setState(3);
            couponReceiveService.updateById(couponReceive);
        }
        // 这里是定时执行的任务逻辑
        System.out.println("定时任务执行啦!");
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BMIVO.java
New file
@@ -0,0 +1,33 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
public class BMIVO extends Model<BMIVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "bmi")
    private String bmi;
    @ApiModelProperty(value = "bmi情况")
    private String msg;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BaseWarpper.java
New file
@@ -0,0 +1,146 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 公共封装类
 */
@ApiModel("公共对象")
public class BaseWarpper {
    @ApiModelProperty("主键id")
    private Integer id;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("内容")
    private String content;
    @ApiModelProperty("数量")
    private Integer number;
    @ApiModelProperty("总数量")
    private Integer totalNumber;
    @ApiModelProperty("金额")
    private Double amount;
    @ApiModelProperty("时长(分钟)")
    private Integer minute;
    @ApiModelProperty("经度")
    private Double lon;
    @ApiModelProperty("纬度")
    private Double lat;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Integer getNumber() {
        return number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }
    public Integer getTotalNumber() {
        return totalNumber;
    }
    public void setTotalNumber(Integer totalNumber) {
        this.totalNumber = totalNumber;
    }
    public Double getAmount() {
        return amount;
    }
    public void setAmount(Double amount) {
        this.amount = amount;
    }
    public Integer getMinute() {
        return minute;
    }
    public void setMinute(Integer minute) {
        this.minute = minute;
    }
    public Double getLon() {
        return lon;
    }
    public void setLon(Double lon) {
        this.lon = lon;
    }
    public Double getLat() {
        return lat;
    }
    public void setLat(Double lat) {
        this.lat = lat;
    }
    @Override
    public String toString() {
        return "BaseWarpper{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", content='" + content + '\'' +
                ", number=" + number +
                ", totalNumber=" + totalNumber +
                ", amount=" + amount +
                ", minute=" + minute +
                ", lon=" + lon +
                ", lat=" + lat +
                '}';
    }
    public static BaseWarpper getBaseWarpper(Map<String, Object> map){
        BaseWarpper baseWarpper = new BaseWarpper();
        if(null != map){
            baseWarpper.setId(null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : 0);
            baseWarpper.setName(null != map.get("name") ? map.get("name").toString() : "");
            baseWarpper.setContent(null != map.get("content") ? map.get("content").toString() : "");
            baseWarpper.setNumber(null != map.get("number") ? Integer.valueOf(map.get("number").toString()) : 0);
            baseWarpper.setTotalNumber(null != map.get("totalNumber") ? Integer.valueOf(map.get("totalNumber").toString()) : 0);
            baseWarpper.setAmount(null != map.get("amount") ? Double.valueOf(map.get("amount").toString()) : 0);
            baseWarpper.setMinute(null != map.get("minute") ? Integer.valueOf(map.get("minute").toString()) : 0);
            baseWarpper.setLon(null != map.get("lon") ? Double.valueOf(map.get("lon").toString()) : 0);
            baseWarpper.setLat(null != map.get("lat") ? Double.valueOf(map.get("lat").toString()) : 0);
        }
        return baseWarpper;
    }
    public static List<BaseWarpper> getBaseWarppers(List<Map<String, Object>> list){
        List<BaseWarpper> data = new ArrayList<>();
        if(null != list){
            for(Map<String, Object> map : list){
                data.add(BaseWarpper.getBaseWarpper(map));
            }
        }
        return data;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BuyDetailVO.java
New file
@@ -0,0 +1,31 @@
package com.stylefeng.guns.modular.system.vo;
import com.stylefeng.guns.modular.system.model.Course;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "立即购买详情页")
public class BuyDetailVO {
    @ApiModelProperty(value = "课程id")
    private Integer id;
    @ApiModelProperty(value = "购买部位")
    private String typeName;
    @ApiModelProperty(value = "支付价格")
    private BigDecimal amount;
    @ApiModelProperty(value = "包含课程数")
    private Integer count;
    @ApiModelProperty(value = "可选套餐列表")
    private List<PackageListVO> packageListVOList;
    @ApiModelProperty(value = "优惠券列表")
    private List<CouponVO> couponVOList;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CommentVO.java
New file
@@ -0,0 +1,72 @@
package com.stylefeng.guns.modular.system.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * 评论列表VO
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@ApiModel(value = "评论列表VO--APP")
public class CommentVO {
    private static final long serialVersionUID = 1L;
    /**
     * 用户姓名
     */
    @ApiModelProperty(value = "评论用户姓名")
    private String userName;
    @ApiModelProperty(value = "评论用户id")
    private Integer userId;
    @ApiModelProperty(value = "是否点赞0否1是")
    private Integer isLike;
    /**
     * 用户姓名
     */
    @ApiModelProperty(value = "回复用户姓名")
    private String replyUserName;
    @ApiModelProperty(value = "回复用户id")
    private String replyUserId;
    /**
     * 用户头像
     */
    @ApiModelProperty(value = "用户头像")
    private String headImg;
    /**
     * 主键
     */
    @ApiModelProperty(value = "评论id")
    private Integer id;
    /**
     * 发布时间
     */
    @ApiModelProperty(value = "发布时间")
    @JsonFormat(pattern = "yyyy-mm-dd HH:mm",timezone = "GMT+8")
    private Date insertTime1;
    @ApiModelProperty(value = "发布时间")
    private String insertTime;
    /**
     * 点赞数
     */
    @ApiModelProperty(value = "点赞数")
    private Integer likeCount;
    /**
     * 内容
     */
    @ApiModelProperty(value = "内容")
    private String content;
    /**
     * 评论
     */
    @ApiModelProperty(value = "评论列表")
    private List<CommentVO> commentList;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CompeleteVO.java
New file
@@ -0,0 +1,26 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
@ApiModel
public class CompeleteVO {
    @ApiModelProperty(value = "课程封面")
    private String coverImg;
    @ApiModelProperty(value = "课程名称")
    private String courseName;
    @ApiModelProperty(value = "坚持运动天数")
    private Integer clockIn;
    @ApiModelProperty(value = "课程是否免费 0否1是 如果课程免费 打卡之后不展示其他文案")
    private Integer isFree;
    @ApiModelProperty(value = "如果配置了打卡赠送优惠券 该字段返回还差xx天能领取优惠券 该字段为null 则没有打卡赠送优惠券")
    private Integer time;
    @ApiModelProperty(value = "可以领取的优惠券列表")
    List<CouponVO> couponVOS;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/ConstellationVO.java
New file
@@ -0,0 +1,54 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
public class ConstellationVO extends Model<ConstellationVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "星座名称")
    private String name;
    @ApiModelProperty(value = "速配")
    private String QFriend;
    @ApiModelProperty(value = "综合指数")
    private String all;
    @ApiModelProperty(value = "幸运色")
    private String color;
    @ApiModelProperty(value = "健康指数(同时也是运势详情的文本内容)")
    private String health;
    @ApiModelProperty(value = "爱情指数(同时也是运势详情的文本内容)")
    private String love;
    @ApiModelProperty(value = "财运指数(同时也是运势详情的文本内容)")
    private String money;
    @ApiModelProperty(value = "幸运数字")
    private String number;
    @ApiModelProperty(value = "今日概述")
    private String summary;
    @ApiModelProperty(value = "日期")
    private String datetime;
    @ApiModelProperty(value = "工作指数(同时也是运势详情的文本内容)")
    private String work;
    @ApiModelProperty(value = "job(同时也是运势详情的文本内容)")
    private String job;
    @ApiModelProperty(value = "标题")
    private String info;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CouponQuery.java
New file
@@ -0,0 +1,18 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class CouponQuery {
    @ApiModelProperty(value = "类型 1全部 2已使用 3未使用 4已过期", required = true)
    private Integer type;
    @ApiModelProperty(value = "用户id 前端忽略")
    private Integer userId;
    @ApiModelProperty(value = "页码,首页1", required = true)
    private Integer pageNum;
    @ApiModelProperty(value = "页条数", required = true)
    private Integer pageSize;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CouponVO.java
New file
@@ -0,0 +1,84 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@ApiModel(value = "优惠券管理VO")
public class CouponVO extends Model<CouponVO> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private Integer id;
    @ApiModelProperty(value = "优惠券名称")
    private String name;
    @ApiModelProperty(value = "优惠券起步使用金额")
    private BigDecimal money;
    @ApiModelProperty(value = "满减金额")
    private BigDecimal reduction;
    /**
     * 用户id
     */
    @ApiModelProperty(value = "领取用户id")
    private Integer userId;
    /**
     * 优惠券ID
     */
    @ApiModelProperty(value = "优惠券id")
    private Integer couponId;
    /**
     * 领取时间
     */
    @ApiModelProperty(value = "领取时间")
    private Date receiveTime;
    /**
     * 领取类型 1打卡 2购课赠送 3消费赠送
     */
    @ApiModelProperty(value = "领取类型 1打卡 2购课赠送 3消费赠送")
    private Integer receiveType;
    // 是否可以使用 包含满足时间
    @ApiModelProperty(value = "是否可以使用该优惠券0否1是")
    private Integer isUse;
    /**
     * 优惠券有效开始日期
     */
    @ApiModelProperty(value = "优惠券有效开始日期")
    private String startTime;
    /**
     * 优惠券有效结束日期
     */
    @ApiModelProperty(value = "优惠券有效结束日期")
    private String endTime;
    /**
     * 状态1 未使用 2已使用
     */
    @ApiModelProperty(value = "状态1 未使用 2已使用 3已过期")
    private Integer state;
    @ApiModelProperty(value = "是否展示赠送奖品文案 0否1是")
    private Integer info;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseDetailVO.java
New file
@@ -0,0 +1,43 @@
package com.stylefeng.guns.modular.system.vo;
import com.stylefeng.guns.modular.system.model.Course;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel
public class CourseDetailVO {
    @ApiModelProperty(value = "课程id")
    private Integer id;
    @ApiModelProperty(value = "课程名称")
    private String courseName;
    @ApiModelProperty(value = "类型名称")
    private String typeName;
    @ApiModelProperty(value = "难度(1、2、3、。。。。)")
    private Integer difficulty;
    @ApiModelProperty(value = "时长")
    private String time;
    @ApiModelProperty(value = "是否免费0否1是")
    private Integer isFree;
    @ApiModelProperty(value = "是否购买0否1是")
    private Integer isBuy;
    @ApiModelProperty(value = "是否收藏0否1是")
    private Integer isCollect;
    @ApiModelProperty(value = "封面图片")
    private String coverImg;
    @ApiModelProperty(value = "课程介绍")
    private String introduce;
    @ApiModelProperty(value = "价格")
    private BigDecimal price;
    @ApiModelProperty(value = "课程视频")
    private List<CourseVideo> videos;
    @ApiModelProperty(value = "推荐课程")
    private List<Course> recommendCourse;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseList.java
New file
@@ -0,0 +1,40 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel
public class CourseList {
    @ApiModelProperty(value = "课程id")
    private Integer id;
    @ApiModelProperty(value = "课程名称")
    private String courseName;
    @ApiModelProperty(value = "类型名称")
    private String typeName;
    @ApiModelProperty(value = "难度(1、2、3、。。。。)")
    private Integer difficulty;
    @ApiModelProperty(value = "时长 单位分钟")
    private Integer minute;
    @ApiModelProperty(value = "时长 单位秒")
    private Integer second;
    @ApiModelProperty(value = "总时长 (例1分1秒)")
    private String time;
    @ApiModelProperty(value = "课程介绍")
    private String introduce;
    @ApiModelProperty(value = "是否免费0否1是")
    private Integer isFree;
    @ApiModelProperty(value = "是否已收藏0否1是")
    private Integer isCollect;
    @ApiModelProperty(value = "封面图片")
    private String coverImg;
    @ApiModelProperty(value = "价格")
    private BigDecimal price;
    @ApiModelProperty(value = "页码,首页1", required = true)
    private Integer pageNum;
    @ApiModelProperty(value = "页条数", required = true)
    private Integer pageSize;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseVO.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class CourseVO {
    @ApiModelProperty(value = "类型名称")
    private String typeName;
    @ApiModelProperty(value = "包含课程数")
    private Integer count;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/DifficultyVO.java
New file
@@ -0,0 +1,15 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DifficultyVO {
    @ApiModelProperty(value = "名字")
    private String name;
    @ApiModelProperty(value = "id")
    private Integer id;
    @ApiModelProperty(value = "是否可用 0否1是")
    private Integer isUse;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/FindVO.java
New file
@@ -0,0 +1,113 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * 我的动态VO
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@ApiModel(value = "我的动态列表VO--APP")
public class FindVO  {
    private static final long serialVersionUID = 1L;
    /**
     * 用户姓名
     */
    @ApiModelProperty(value = "用户姓名")
    private String userName;
    /**
     * 用户头像
     */
    @ApiModelProperty(value = "用户头像")
    private String headImg;
    @ApiModelProperty(value = "封面图片")
    private String coverImage;
    @ApiModelProperty(value = "是否点赞 0否1是")
    private Integer isLike;
    /**
     * 用户打卡次数
     */
    @ApiModelProperty(value = "用户打卡次数")
    private Integer clockIn;
    /**
     * 评论数
     */
    @ApiModelProperty(value = "动态评论数量")
    private Integer comment;
    /**
     * 主键
     */
    @ApiModelProperty(value = "发现id")
    private Integer id;
    /**
     * 发布用户id
     */
    @ApiModelProperty(value = "发布用户id")
    private Integer userId;
    /**
     * 发布时间
     */
    @ApiModelProperty(value = "发布时间")
    @JsonFormat(pattern = "yyyy-mm-dd HH:mm",timezone = "GMT+8")
    private Date insertTime1;
    @ApiModelProperty(value = "发布时间")
    private String insertTime;
    /**
     * 点赞数
     */
    @ApiModelProperty(value = "点赞数")
    private Integer likeCount;
    /**
     * 标题
     */
    @ApiModelProperty(value = "标题")
    private String title;
    /**
     * 内容
     */
    @ApiModelProperty(value = "内容")
    private String content;
    /**
     * 图片
     */
    @ApiModelProperty(value = "图片 多张逗号隔开")
    private String img;
    /**
     * 视频
     */
    @ApiModelProperty(value = "视频   多个逗号隔开")
    private String video;
    /**
     * 是否置顶0否1是
     */
    @ApiModelProperty(value = "是否置顶0否1是")
    private Integer isTop;
    /**
     * 是否删除0否1是
     */
    @ApiModelProperty(value = "是否删除0否1是")
    private Integer isDelete;
    /**
     * 评论
     */
    @ApiModelProperty(value = "评论列表")
    private List<CommentVO> commentList;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/MessageQuery.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel
public class MessageQuery {
    @ApiModelProperty(value = "页码,首页1", required = true)
    private Integer pageNum;
    @ApiModelProperty(value = "页条数", required = true)
    private Integer pageSize;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/MessagesVO.java
New file
@@ -0,0 +1,37 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel
public class MessagesVO {
    @ApiModelProperty(value = "头像")
    private String headImg;
    @ApiModelProperty(value = "名称")
    private String userName;
    @ApiModelProperty(value = "时间")
    private Date time;
    @ApiModelProperty(value = "时间")
    private String insertTime;
    @ApiModelProperty(value = "是否读取0否1是")
    private Integer isRead;
    @ApiModelProperty(value = "如果是评论消息 就展示评论内容 如果是点赞动态就展示动态标题 如果是点赞评论就展示评论内容")
    private String content;
    @ApiModelProperty(value = "动态标题")
    private String title;
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "类型 消息类型1系统通知 2点赞 3评论")
    private Integer type;
    @ApiModelProperty(value = "动态id")
    private Integer findId;
    @ApiModelProperty(value = "评论id")
    private Integer findCommentId;
    @ApiModelProperty(value = "是否可以跳转动态详情 0是1否")
    private Integer isTurn;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/PackageListVO.java
New file
@@ -0,0 +1,29 @@
package com.stylefeng.guns.modular.system.vo;
import com.stylefeng.guns.modular.system.model.Course;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "可选套餐列表")
public class PackageListVO {
    @ApiModelProperty(value = "套餐id")
    private Integer id;
    @ApiModelProperty(value = "套餐名称")
    private String packageName;
    @ApiModelProperty(value = "套餐原价")
    private BigDecimal amount;
    @ApiModelProperty(value = "套餐价格(和原价相等的话 没有优惠)")
    private BigDecimal price;
    @ApiModelProperty(value = "套餐包含的部位ids 前端忽略")
    private String ids;
    @ApiModelProperty(value = "部位")
    private List<CourseVO> recommendCourse;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/PaySuccessVO.java
New file
@@ -0,0 +1,34 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@ApiModel("支付成功返回VO")
public class PaySuccessVO extends Model<PaySuccessVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "赠送优惠券 如果支付使用了优惠券 才会填入该字段")
    private CouponVO coupon;
    @ApiModelProperty(value = "是否首次下单赠送物品0否1是")
    private Integer isGive;
    @ApiModelProperty(value = "用户是否为首次下单")
    private Integer isFirst;
    @ApiModelProperty(value = "该用户是否填写了地址 0否1是")
    private Integer isAddress;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/PeopleListVO.java
New file
@@ -0,0 +1,38 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
public class PeopleListVO extends Model<PeopleListVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "我的邀请人 为null 就是没有邀请人")
    private String invite;
    @ApiModelProperty(value = "我邀请的好友 为null 就是没有邀请好友")
    private String people;
    @ApiModelProperty(value = "这是文字说明内容")
    private String content;
    @ApiModelProperty(value = "当前登陆人的id")
    private Integer id;
    @ApiModelProperty(value = "当前登陆人的邀请码")
    private String code;
    @ApiModelProperty(value = "链接")
    private String url;
    @ApiModelProperty(value = "绑定用户名称")
    private String userName;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/ProtocolVO.java
New file
@@ -0,0 +1,51 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 协议
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
public class ProtocolVO extends Model<ProtocolVO> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private Integer id;
    private Integer type;
    @ApiModelProperty(value = "公告内容")
    private String content;
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
    private String insertTime;
    @ApiModelProperty(value = "时间戳")
    private Long time;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/SearchList.java
New file
@@ -0,0 +1,22 @@
package com.stylefeng.guns.modular.system.vo;
import com.stylefeng.guns.modular.system.model.FitnessPosition;
import com.stylefeng.guns.modular.system.model.FitnessType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel
public class SearchList {
    @ApiModelProperty(value = "类型列表")
    private List<FitnessType> fitnessType;
    @ApiModelProperty(value = "部位列表")
    private List<FitnessPosition> fitnessPosition;
    @ApiModelProperty(value = "难度列表")
    private List<DifficultyVO> difficulty;
    @ApiModelProperty(value = "时长列表")
    private List<DifficultyVO> time;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/StartTrainVO.java
New file
@@ -0,0 +1,50 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
public class StartTrainVO extends Model<StartTrainVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "当前课程总时长 秒")
    private Integer allTime;
    @ApiModelProperty(value = "当前视频总时长 秒")
    private Integer time;
    @ApiModelProperty(value = "上次观看位置 xx 秒")
    private Integer beforeTime;
    @ApiModelProperty(value = "上次观看到的视频id")
    private Integer beforeVideoId;
    @ApiModelProperty(value = "实际观看时间")
    private Integer realTime;
    @ApiModelProperty(value = "视频地址")
    private String courseVideo;
    @ApiModelProperty(value = "视频名称")
    private String videoName;
    @ApiModelProperty(value = "课程视频列表")
    private List<CourseVideo> videos;
    @ApiModelProperty(value = "当前视频位置 (例如 1/13)")
    private String position;
    @ApiModelProperty(value = "封面图")
    private String coverImg;
    @ApiModelProperty(value = "是否是首次训练")
    private Integer isFirst;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/StartVO.java
New file
@@ -0,0 +1,30 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
public class StartVO extends Model<StartVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "状态0不需要展示风险告知 1需要展示")
    private Integer state;
    @ApiModelProperty(value = "风险告知内容")
    private String riskInfo;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/UserDetailVO.java
New file
@@ -0,0 +1,33 @@
package com.stylefeng.guns.modular.system.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 我的动态VO
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@ApiModel
public class UserDetailVO {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "金额")
    private String amount;
    @ApiModelProperty(value = "变动类型")
    private String type;
    @ApiModelProperty(value = "时间")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date insertTime1;
    private String insertTime;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/UserInfoVO.java
New file
@@ -0,0 +1,74 @@
package com.stylefeng.guns.modular.system.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.stylefeng.guns.modular.system.model.Course;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@ApiModel
public class UserInfoVO {
    @ApiModelProperty(value = "用户id")
    private Integer id;
    @ApiModelProperty(value = "苹果id 安卓忽略")
    private String appleId;
    @ApiModelProperty(value = "用户电话")
    private String phone;
    @ApiModelProperty(value = "用户名称")
    private String name;
    @ApiModelProperty(value = "邀请码")
    private String code;
    @ApiModelProperty(value = "身高")
    private Integer height;
    @ApiModelProperty(value = "体重")
    private Double weight;
    @ApiModelProperty(value = "腰围cm")
    private Integer waistline;
    @ApiModelProperty(value = "星座名称")
    private String constellation;
    @ApiModelProperty(value = "BMI(该字段如果为null 就是数据不完善 提示去完善)")
    private String BMI;
    @ApiModelProperty(value = "BMI情况该字段如果为null 就是数据不完善 提示去完善")
    private String BMIInfo;
    @ApiModelProperty(value = "生日")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private String birthday;
    @ApiModelProperty(value = "打卡次数")
    private Integer clockIn;
    @ApiModelProperty(value = "头像")
    private String headImg;
    @ApiModelProperty(value = "性别")
    private Integer gender;
    @ApiModelProperty(value = "用户选择的体重单位 1公斤 2斤 3磅")
    private Integer unit;
    @ApiModelProperty(value = "年龄")
    private long age;
    @ApiModelProperty(value = "记录时间")
    private String recordTime;
    @ApiModelProperty(value = "当前时间")
    private String nowDate;
    @ApiModelProperty(value = "距离上次该字段如果为null 就是数据不完善 提示去完善")
    private Double distanceBefore;
    @ApiModelProperty(value = "距离目标该字段如果为null 就是数据不完善 提示去完善")
    private Double distanceTarget;
    @ApiModelProperty(value = "BMI变化该字段如果为null 就是数据不完善 提示去完善")
    private Double distanceBMI;
    @ApiModelProperty(value = "目标体重该字段如果为null 就是数据不完善 提示去完善")
    private Double target;
    @ApiModelProperty(value = "健康提示")
    private String tips;
    @ApiModelProperty(value = "健康指数(基础代谢率)该字段如果为null 就是数据不完善 提示去完善")
    private String index;
    @ApiModelProperty(value = "健康指数(每日卡路里消耗)该字段如果为null 就是数据不完善 提示去完善")
    private String calorie;
    @ApiModelProperty(value = "健康指数(体脂率)该字段如果为null 就是数据不完善 提示去完善")
    private String percentage;
    @ApiModelProperty(value = "体重趋势")
    private List<WeightVO> weightTrend;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WXLoginVO.java
New file
@@ -0,0 +1,32 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
public class WXLoginVO extends Model<WXLoginVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "token")
    private String token;
    @ApiModelProperty(value = "是否绑定手机号 0否1是")
    private String isBind;
    @ApiModelProperty(value = "用户id")
    private Integer id;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WalletVO.java
New file
@@ -0,0 +1,17 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel
public class WalletVO {
    @ApiModelProperty(value = "钱包余额")
    private BigDecimal balance;
    @ApiModelProperty(value = "变动明细")
    private List<UserDetailVO> details;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WeightVO.java
New file
@@ -0,0 +1,32 @@
package com.stylefeng.guns.modular.system.vo;
import com.baomidou.mybatisplus.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 用户优惠券管理
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Data
@ApiModel(value = "体重趋势")
public class WeightVO extends Model<WeightVO> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "时间")
    private String time;
    @ApiModelProperty(value = "体重")
    private Double weight;
    @Override
    protected Serializable pkVal() {
        return null;
    }
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/WithdtawalVO.java
New file
@@ -0,0 +1,24 @@
package com.stylefeng.guns.modular.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@ApiModel(value = "提现记录VO")
public class WithdtawalVO {
    @ApiModelProperty(value = "时间")
    private String insertTime;
    @ApiModelProperty(value = "金额")
    private String amount;
    @ApiModelProperty(value = "拒绝理由")
    private String reason;
    @ApiModelProperty(value = "状态")
    private String state;
}
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DeptWarpper.java
@@ -1,7 +1,7 @@
package com.stylefeng.guns.modular.system.warpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.util.ToolUtil;
import java.util.Map;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DictWarpper.java
@@ -1,9 +1,9 @@
package com.stylefeng.guns.modular.system.warpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.modular.system.model.Dict;
import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.model.Dict;
import java.util.List;
import java.util.Map;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LogWarpper.java
@@ -1,7 +1,7 @@
package com.stylefeng.guns.modular.system.warpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.util.Contrast;
import com.stylefeng.guns.core.util.ToolUtil;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/NoticeWrapper.java
@@ -1,7 +1,7 @@
package com.stylefeng.guns.modular.system.warpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import java.util.Map;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/PointLocation.java
File was deleted
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RoleWarpper.java
@@ -1,7 +1,7 @@
package com.stylefeng.guns.modular.system.warpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import java.util.List;
import java.util.Map;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserWarpper.java
@@ -1,7 +1,7 @@
package com.stylefeng.guns.modular.system.warpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import java.util.List;
import java.util.Map;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/AddHouseReq.java
@@ -1,6 +1,5 @@
package com.stylefeng.guns.modular.system.warpper.req;
import com.baomidou.mybatisplus.annotations.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/HousingDemandReq.java
@@ -1,6 +1,5 @@
package com.stylefeng.guns.modular.system.warpper.req;
import com.baomidou.mybatisplus.annotations.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/SearchHouseResourceReq.java
@@ -4,8 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/11/8 15:20
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/UpdateAppUser.java
@@ -1,14 +1,7 @@
package com.stylefeng.guns.modular.system.warpper.req;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* APP用户
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/req/UserInfoDTO.java
@@ -4,8 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 找中介-个人详情-我的房源
 */
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/res/CollectListRes.java
@@ -5,9 +5,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 个人中心 房源列表
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/res/HousingDemandInfoRes.java
@@ -4,7 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/res/SearchIntermediaryListRes.java
@@ -4,8 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/11/21 15:38
guns-admin/src/main/resources/application-dev.yml
@@ -1,13 +1,16 @@
server:
  port: 81
  port: 82
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://192.168.110.64:3306/rental_house_applet?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.110.64:3306/jk_fitness?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root
    db-name: rental_house_applet #用来搜集数据库的所有表
#    url: jdbc:mysql://127.0.0.1:10633/jk_fitness?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
#    username: root
#    password: '@Cjp123456'
    db-name: jk_fitness #用来搜集数据库的所有表
    filters: wall,mergeStat
#多数据源情况的配置
@@ -18,8 +21,8 @@
    username: root
    password: root
    dataSourceNames:
    - dataSourceGuns
    - dataSourceBiz
      - dataSourceGuns
      - dataSourceBiz
---
@@ -42,6 +45,7 @@
redis:
  host: 127.0.0.1
  port: 6379
#  password: Cjp123456
  password: 123456
  database: 0
  timeout: 600000
@@ -54,21 +58,16 @@
      min-idle: 0
---
spring:
  data:
    mongodb:
      # 指定MongoDB服务地址
      host: 192.168.110.188
      # 指定端口,默认就为27017
      port: 27017
      # 指定使用的数据库(集合)
      database: applet
      # 登录认证的逻辑库名
      authentication-database: applet
---
oss:
  endpoint: oss-cn-hongkong.aliyuncs.com
  accessKeyId: LTAI5tQZzqsZYX5gw8yRNchQ
  accessKeySecret: 5yJVdXwRzwPZwKKXp07lRAc7tkTxQp
  bucketName: bizuphk
---
huawei:
  url: https://smsapi.cn-north-4.myhuaweicloud.com:443/sms/batchSendSms/v1  #应用程序唯一标识
  appKey: uD8TsCfP2jT25fGp7B6jRI8FNy6K
  appSecret: lop0UTIi7XW1UpkyM4TSLtzuygWm
  sender: 8824032112845
  templateId: 6a7b9ea3dd7348799ea241d7c5e930c4
  signature: 陕西中力兴健网络
guns-admin/src/main/resources/application.yml
@@ -30,4 +30,4 @@
spring:
  profiles:
    active: @spring.active@
    active: dev
guns-admin/src/main/webapp/WEB-INF/view/system/sysDict/sysDict.html
New file
@@ -0,0 +1,38 @@
@layout("/common/_container.html"){
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>字典管理管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <div class="col-sm-3">
                                <#NameCon id="condition" name="名称" />
                            </div>
                            <div class="col-sm-3">
                                <#button name="搜索" icon="fa-search" clickFun="SysDict.search()"/>
                            </div>
                        </div>
                        <div class="hidden-xs" id="SysDictTableToolbar" role="group">
                            @if(shiro.hasPermission("/sysDict/add")){
                                <#button name="添加" icon="fa-plus" clickFun="SysDict.openAddSysDict()"/>
                            @}
                            @if(shiro.hasPermission("/sysDict/update")){
                                <#button name="修改" icon="fa-edit" clickFun="SysDict.openSysDictDetail()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/sysDict/delete")){
                                <#button name="删除" icon="fa-remove" clickFun="SysDict.delete()" space="true"/>
                            @}
                        </div>
                        <#table id="SysDictTable"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/static/modular/system/sysDict/sysDict.js"></script>
@}
guns-admin/src/main/webapp/WEB-INF/view/system/sysDict/sysDict_add.html
New file
@@ -0,0 +1,33 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal">
            <div class="row">
                <div class="col-sm-6 b-r">
                            <#input id="id" name="主键id" underline="true"/>
                            <#input id="num" name="排序" underline="true"/>
                            <#input id="pid" name="父部门id" underline="true"/>
                            <#input id="pids" name="父级ids"/>
                </div>
                <div class="col-sm-6">
                            <#input id="simplename" name="简称" underline="true"/>
                            <#input id="fullname" name="全称" underline="true"/>
                            <#input id="tips" name="提示" underline="true"/>
                            <#input id="version" name="版本(乐观锁保留字段)" underline="true"/>
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10">
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="SysDictInfoDlg.addSubmit()"/>
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="SysDictInfoDlg.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/static/modular/system/sysDict/sysDict_info.js"></script>
@}
guns-admin/src/main/webapp/WEB-INF/view/system/sysDict/sysDict_edit.html
New file
@@ -0,0 +1,33 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal">
            <div class="row">
                <div class="col-sm-6 b-r">
                            <#input id="id" name="主键id" value="${item.id}" underline="true"/>
                            <#input id="num" name="排序" value="${item.num}" underline="true"/>
                            <#input id="pid" name="父部门id" value="${item.pid}" underline="true"/>
                            <#input id="pids" name="父级ids" value="${item.pids}" />
                </div>
                <div class="col-sm-6">
                            <#input id="simplename" name="简称" value="${item.simplename}" underline="true"/>
                            <#input id="fullname" name="全称" value="${item.fullname}" underline="true"/>
                            <#input id="tips" name="提示" value="${item.tips}" underline="true"/>
                            <#input id="version" name="版本(乐观锁保留字段)" value="${item.version}" />
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10">
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="SysDictInfoDlg.editSubmit()"/>
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="SysDictInfoDlg.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/static/modular/system/sysDict/sysDict_info.js"></script>
@}
guns-admin/src/main/webapp/static/modular/system/sysDict/sysDict.js
New file
@@ -0,0 +1,104 @@
/**
 * 字典管理管理初始化
 */
var SysDict = {
    id: "SysDictTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
SysDict.initColumn = function () {
    return [
        {field: 'selectItem', radio: true},
            {title: '主键id', field: 'id', visible: true, align: 'center', valign: 'middle'},
            {title: '排序', field: 'num', visible: true, align: 'center', valign: 'middle'},
            {title: '父部门id', field: 'pid', visible: true, align: 'center', valign: 'middle'},
            {title: '父级ids', field: 'pids', visible: true, align: 'center', valign: 'middle'},
            {title: '简称', field: 'simplename', visible: true, align: 'center', valign: 'middle'},
            {title: '全称', field: 'fullname', visible: true, align: 'center', valign: 'middle'},
            {title: '提示', field: 'tips', visible: true, align: 'center', valign: 'middle'},
            {title: '版本(乐观锁保留字段)', field: 'version', visible: true, align: 'center', valign: 'middle'}
    ];
};
/**
 * 检查是否选中
 */
SysDict.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        SysDict.seItem = selected[0];
        return true;
    }
};
/**
 * 点击添加字典管理
 */
SysDict.openAddSysDict = function () {
    var index = layer.open({
        type: 2,
        title: '添加字典管理',
        area: ['800px', '420px'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/sysDict/sysDict_add'
    });
    this.layerIndex = index;
};
/**
 * 打开查看字典管理详情
 */
SysDict.openSysDictDetail = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: '字典管理详情',
            area: ['800px', '420px'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/sysDict/sysDict_update/' + SysDict.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 删除字典管理
 */
SysDict.delete = function () {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/sysDict/delete", function (data) {
            Feng.success("删除成功!");
            SysDict.table.refresh();
        }, function (data) {
            Feng.error("删除失败!" + data.responseJSON.message + "!");
        });
        ajax.set("sysDictId",this.seItem.id);
        ajax.start();
    }
};
/**
 * 查询字典管理列表
 */
SysDict.search = function () {
    var queryData = {};
    queryData['condition'] = $("#condition").val();
    SysDict.table.refresh({query: queryData});
};
$(function () {
    var defaultColunms = SysDict.initColumn();
    var table = new BSTable(SysDict.id, "/sysDict/list", defaultColunms);
    table.setPaginationType("client");
    SysDict.table = table.init();
});
guns-admin/src/main/webapp/static/modular/system/sysDict/sysDict_info.js
New file
@@ -0,0 +1,100 @@
/**
 * 初始化字典管理详情对话框
 */
var SysDictInfoDlg = {
    sysDictInfoData : {}
};
/**
 * 清除数据
 */
SysDictInfoDlg.clearData = function() {
    this.sysDictInfoData = {};
}
/**
 * 设置对话框中的数据
 *
 * @param key 数据的名称
 * @param val 数据的具体值
 */
SysDictInfoDlg.set = function(key, val) {
    this.sysDictInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
    return this;
}
/**
 * 设置对话框中的数据
 *
 * @param key 数据的名称
 * @param val 数据的具体值
 */
SysDictInfoDlg.get = function(key) {
    return $("#" + key).val();
}
/**
 * 关闭此对话框
 */
SysDictInfoDlg.close = function() {
    parent.layer.close(window.parent.SysDict.layerIndex);
}
/**
 * 收集数据
 */
SysDictInfoDlg.collectData = function() {
    this
    .set('id')
    .set('num')
    .set('pid')
    .set('pids')
    .set('simplename')
    .set('fullname')
    .set('tips')
    .set('version');
}
/**
 * 提交添加
 */
SysDictInfoDlg.addSubmit = function() {
    this.clearData();
    this.collectData();
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/sysDict/add", function(data){
        Feng.success("添加成功!");
        window.parent.SysDict.table.refresh();
        SysDictInfoDlg.close();
    },function(data){
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set(this.sysDictInfoData);
    ajax.start();
}
/**
 * 提交修改
 */
SysDictInfoDlg.editSubmit = function() {
    this.clearData();
    this.collectData();
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/sysDict/update", function(data){
        Feng.success("修改成功!");
        window.parent.SysDict.table.refresh();
        SysDictInfoDlg.close();
    },function(data){
        Feng.error("修改失败!" + data.responseJSON.message + "!");
    });
    ajax.set(this.sysDictInfoData);
    ajax.start();
}
$(function() {
});
guns-core/pom.xml
@@ -16,6 +16,14 @@
    <dependencies>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.11</version>
        </dependency>
        <!--通用依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
@@ -49,7 +57,6 @@
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>javax.servlet</groupId>
guns-core/src/main/java/com/stylefeng/guns/core/util/MD5Util.java
@@ -34,6 +34,6 @@
    }
    public static void main(String[] args) {
        System.out.println(encrypt("123456"));
        System.out.println(encrypt("111111"));
    }
}
guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/GunsGeneratorConfig.java
@@ -12,33 +12,33 @@
public class GunsGeneratorConfig extends AbstractGeneratorConfig {
    protected void globalConfig() {
        globalConfig.setOutputDir("D:\\ttt");//写自己项目的绝对路径,注意具体到java目录
        globalConfig.setOutputDir("D:\\JK\\guns-admin\\src\\main\\java");//写自己项目的绝对路径,注意具体到java目录
        globalConfig.setFileOverride(true);
        globalConfig.setEnableCache(false);
        globalConfig.setBaseResultMap(true);
        globalConfig.setBaseColumnList(true);
        globalConfig.setOpen(false);
        globalConfig.setAuthor("stylefeng");
        globalConfig.setAuthor("无关风月");
    }
    protected void dataSourceConfig() {
        dataSourceConfig.setDbType(DbType.MYSQL);
        dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/guns?characterEncoding=utf8");
        dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/jk_fitness?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai");
    }
    protected void strategyConfig() {
        strategyConfig.setTablePrefix(new String[]{"sys_"});// 此处可以修改为您的表前缀
        strategyConfig.setTablePrefix(new String[]{"t_"});// 此处可以修改为您的表前缀
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
    }
    protected void packageConfig() {
        packageConfig.setParent(null);
        packageConfig.setEntity("com.stylefeng.guns.admin.common.persistence.model");
        packageConfig.setMapper("com.stylefeng.guns.admin.common.persistence.dao");
        packageConfig.setXml("com.stylefeng.guns.admin.common.persistence.dao.mapping");
        packageConfig.setEntity("com.stylefeng.guns.modular.system.model");
        packageConfig.setMapper("com.stylefeng.guns.modular.system.dao");
        packageConfig.setXml("com.stylefeng.guns.modular.system.dao.mapping");
    }
    protected void contextConfig() {
@@ -47,7 +47,7 @@
        contextConfig.setBizChName("字典管理");
        contextConfig.setBizEnName("sysDict");
        contextConfig.setModuleName("system");
        contextConfig.setProjectPath("D:\\ideaSpace\\guns\\guns-admin");//写自己项目的绝对路径
        contextConfig.setProjectPath("D:\\JK\\guns-admin");//写自己项目的绝对路径
        contextConfig.setEntityName("SysDict");
        sqlConfig.setParentMenuName(null);//这里写已有菜单的名称,当做父节点
guns-management/.idea/$PRODUCT_WORKSPACE_FILE$
New file
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="masterDetails">
    <states>
      <state key="GlobalLibrariesConfigurable.UI">
        <settings>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="JdkListConfigurable.UI">
        <settings>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ProjectJDKs.UI">
        <settings>
          <last-edited>1.8</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ProjectLibrariesConfigurable.UI">
        <settings>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
    </states>
  </component>
</project>
guns-management/.idea/.gitignore
New file
@@ -0,0 +1,2 @@
# Default ignored files
/workspace.xml
guns-management/.idea/guns-management.iml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$" />
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>
guns-management/.idea/misc.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="JavaScriptSettings">
    <option name="languageLevel" value="ES6" />
  </component>
  <component name="MavenProjectsManager">
    <option name="originalFiles">
      <list>
        <option value="$PROJECT_DIR$/pom.xml" />
      </list>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/classes" />
  </component>
</project>
guns-management/.idea/modules.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/.idea/guns-management.iml" filepath="$PROJECT_DIR$/.idea/guns-management.iml" />
    </modules>
  </component>
</project>
guns-management/.idea/vcs.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
  </component>
</project>
guns-management/pom.xml
@@ -10,13 +10,11 @@
    </parent>
    <dependencies>
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.11.0</version>
            <groupId>com.huaweicloud</groupId>
            <artifactId>esdk-obs-java-bundle</artifactId>
            <version>3.23.9</version>
        </dependency>
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
@@ -41,8 +39,17 @@
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>com.huawei.apigateway</groupId>
            <artifactId>java-sdk-core</artifactId>
            <version>3.2.5</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/java-sdk-core-3.2.5.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.stylefeng</groupId>
            <artifactId>guns-core</artifactId>
@@ -51,7 +58,12 @@
            <groupId>com.stylefeng</groupId>
            <artifactId>guns-generator</artifactId>
        </dependency>
        <!--华为云的obs-->
        <dependency>
            <groupId>com.huaweicloud</groupId>
            <artifactId>esdk-obs-java</artifactId>
            <version>3.19.5</version>
        </dependency>
        <!--spring boot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
@@ -125,7 +137,11 @@
        <!--<groupId>org.springframework.boot</groupId>-->
        <!--<artifactId>spring-boot-starter-data-redis</artifactId>-->
        <!--</dependency>-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.14.7</version>
        </dependency>
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
@@ -197,11 +213,7 @@
            <artifactId>poi-ooxml</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
@@ -242,11 +254,7 @@
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
        <dependency>
            <!-- jsoup HTML parser library @ https://jsoup.org/ -->
            <groupId>org.jsoup</groupId>
@@ -275,15 +283,17 @@
            <artifactId>emoji-java</artifactId>
            <version>5.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.9</version>
        </dependency>
    </dependencies>
    <packaging>jar</packaging>
guns-management/src/main/java/com/stylefeng/guns/config/OSSConfig.java
File was deleted
guns-management/src/main/java/com/stylefeng/guns/config/OSSService.java
File was deleted
guns-management/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
@@ -181,6 +181,8 @@
        hashMap.put("/global/sessionError", "anon");
        hashMap.put("/kaptcha", "anon");
        hashMap.put("/base/user/login", "anon");
        hashMap.put("/base/user/getSMSCode", "anon");
        hashMap.put("/base/user/updatePassword", "anon");
        hashMap.put("/base/oss/upload", "anon");
        hashMap.put("/**", "user");
        shiroFilter.setFilterChainDefinitionMap(hashMap);
guns-management/src/main/java/com/stylefeng/guns/core/util/HttpUtils.java
@@ -1,6 +1,5 @@
package com.stylefeng.guns.core.util;
import com.aliyun.oss.ServiceException;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/AppUserController.java
New file
@@ -0,0 +1,510 @@
package com.stylefeng.guns.modular.code.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.stylefeng.guns.core.support.HttpKit;
import com.stylefeng.guns.modular.system.dto.BalanceQuery;
import com.stylefeng.guns.modular.system.dto.TeamQuery;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.Page;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.dto.AppUserQuery;
import com.stylefeng.guns.modular.system.vo.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Controller
@RequestMapping("/base/appUser")
public class AppUserController {
    protected HttpServletResponse getHttpServletResponse() {
        return HttpKit.getResponse();
    }
    protected HttpServletRequest getHttpServletRequest() {
        return HttpKit.getRequest();
    }
    @Autowired
    private IUserService userService;
    @Autowired
    private IBannerService bannerService;
    @Autowired
    private ISysDataTypeService typeService;
    @Autowired
    private IMenuService menuService;
    @Autowired
    private IRegionService regionService;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private IRechargeService rechargeService;
    @Autowired
    private IInviteService inviteService;
    @Autowired
    private IWithdrawalService withdrawalService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private IOrderCourseService orderCourseService;
    @Autowired
    private IRedPackageService redPackageService;
    @ResponseBody
    @PostMapping("/findTeam")
    @ApiOperation(value = "用户团队销售统计-查看成员", tags = {"用户管理"})
    public ResultUtil<PageInfo<TeamVO>> findTeam(BalanceQuery query) {
        List<TeamVO> teamVOS = new ArrayList<>();
        if (query.getEndTime()!=null){
            query.getEndTime().setHours(23);
            query.getEndTime().setMinutes(59);
            query.getEndTime().setSeconds(59);
        }
        // 先统计团队成员有哪些
        List<Integer> inviteUserId = appUserService.selectList(new EntityWrapper<AppUser>()
                .eq("inviteUserId", query.getId())).stream().map(AppUser::getId)
                .collect(Collectors.toList());
        if (inviteUserId.size()!=0) {
            // 再查询这些用户邀请了哪些人 这些人就是这个用户的团队成员
            List<AppUser> users = appUserService.selectList(new EntityWrapper<AppUser>()
                    .in("inviteUserId", inviteUserId));
            for (AppUser user : users) {
                TeamVO teamVO = new TeamVO();
                teamVO.setPhone(user.getPhone());
                teamVO.setName(user.getName());
                teamVO.setId(user.getId());
                teamVOS.add(teamVO);
            }
        }
        List<TeamVO> res = inviteService.findTeam(query);
        for (TeamVO re : res) {
            for (TeamVO teamVO : res) {
                if (re.getId().equals(teamVO.getId())){
                    re.setName(teamVO.getName());
                    re.setPhone(teamVO.getPhone());
                    break;
                }
            }
        }
        List<TeamVO> sortedList = res.stream()
                .sorted(Comparator.comparing(TeamVO::getAmount).reversed())
                .collect(Collectors.toList());
//        PageHelper.startPage(query.getPageNum(),query.getPageSize());
        PageInfo<TeamVO> info=new PageInfo<>(sortedList);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/userList")
    @ApiOperation(value = "用户列表", tags = {"用户管理"})
    public ResultUtil<PageInfo<AppUserVO>> couponReceive(AppUserQuery query) {
        List<AppUserVO> appUserVOS = new ArrayList<>();
        List<AppUser> users = appUserService.selectList1(query.getName(),query.getPhone());
        for (AppUser user : users) {
            AppUserVO appUserVO = new AppUserVO();
            BeanUtils.copyProperties(user,appUserVO);
            // 查询这个用户是不是有人邀请他
            if (user.getInviteUserId()!=null){
                String name = appUserService.selectById(user.getInviteUserId()).getName();
                appUserVO.setInviteUserName(name);
            }
            appUserVOS.add(appUserVO);
        }
//        PageHelper.startPage(query.getPageNum(),query.getPageSize());
        PageInfo<AppUserVO> info=new PageInfo<>(appUserVOS);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/freeze")
    @ApiOperation(value = "冻结/解冻", tags = {"用户管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "类型1=冻结 2=解冻 3=删除", name = "type"),
            @ApiImplicitParam(value = "用户id", name = "id")
    })
    public ResultUtil freeze(Integer type,Integer id) {
        AppUser appUser = appUserService.selectById(id);
        if (type==1){
            appUser.setState(2);
            appUserService.updateById(appUser);
            return ResultUtil.success("冻结成功");
        }else if (type==2){
            appUser.setState(1);
            appUserService.updateById(appUser);
            return ResultUtil.success("解冻成功");
        }else {
            appUser.setState(3);
            appUserService.updateById(appUser);
            return ResultUtil.success("删除成功");
        }
    }
    @Autowired
    private IRecipientService recipientService;
    @ResponseBody
    @PostMapping("/userDetail")
    @ApiOperation(value = "用户详情", tags = {"用户管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "用户id", name = "id")
    })
    public ResultUtil<AppUserDetailVO> userDetail(Integer id) {
        AppUser appUser = appUserService.selectById(id);
        AppUserDetailVO res = new AppUserDetailVO();
        res.setName(appUser.getName());
        res.setGender(appUser.getGender());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        if (appUser.getBirthday()!=null){
            String format1 = format.format(appUser.getBirthday());
            res.setBirthday(format1);
        }
        if (null == appUser.getHeight()){
            res.setHeight("0cm");
        }else{
            res.setHeight(appUser.getHeight()+"cm");
        }
        if (null == appUser.getWeight()){
            res.setWeight("0kg");
        }else{
            res.setWeight(appUser.getWeight()+"kg");
        }
        res.setPhone(appUser.getPhone());
        String temp = "新人";
        if (appUser.getClockIn()>=240){
            temp = "王者达人";
        }else if (appUser.getClockIn()>=120){
            temp = "大师达人";
        }else if (appUser.getClockIn()>=90){
            temp = "钻石达人";
        }else if (appUser.getClockIn()>=60){
            temp = "黄金达人";
        }else if (appUser.getClockIn()>=30){
            temp = "白银达人";
        }else if (appUser.getClockIn()>=10){
            temp = "青铜达人";
        }
        res.setClockIn(temp);
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String format2 = format1.format(appUser.getInsertTime());
        res.setInsertTime(format2);
        Recipient userId1 = recipientService.selectOne(new EntityWrapper<Recipient>()
                .eq("userId", appUser.getId()));
        if (userId1!=null){
            res.setAddress(userId1.getProvince()+userId1.getCity()+userId1.getAddress());
        }
        if (appUser.getInviteUserId()!=null){
            AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId());
            if (appUser1!=null){
                res.setInviteUserName(appUser1.getName());
            }
        }
        BigDecimal totalAmount = new BigDecimal("0");
        res.setBalance(appUser.getBalance());
        // 查询用户充值金额
        List<Recharge> recharges = rechargeService.selectList(new EntityWrapper<Recharge>()
                .eq("userId", id).eq("state", 2));
        if (recharges.size()>0){
            List<BigDecimal> collect = recharges.stream()
                    .map(Recharge::getAmount).collect(Collectors.toList());
             totalAmount = collect.stream()
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
        }
        res.setRechargeMoney(totalAmount);
        BigDecimal friendMoney = new BigDecimal("0");
        // 查询消费金额
        List<BigDecimal> userId = inviteService.selectList(new EntityWrapper<Invite>()
                .eq("userId", id)).stream().map(Invite::getAmount).collect(Collectors.toList());
         friendMoney = userId.stream()
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        res.setFriendMoney(friendMoney);
        BigDecimal withdrawalMoney = new BigDecimal("0");
        List<Withdrawal> collect1 = withdrawalService.selectList(new EntityWrapper<Withdrawal>()
                .eq("userId", id)
                .eq("payment", 2));
        if (collect1.size()>0){
            withdrawalMoney = collect1.stream().map(Withdrawal::getAmount)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
        }
        res.setWithdrawalMoney(withdrawalMoney);
        // 查询用户总共消费多少 只查询购买课程和套餐所花的钱
        List<Order> collect2 = orderService.selectList(new EntityWrapper<Order>()
                .eq("userId", id)
                .eq("state", 2));
        BigDecimal consum1 = new BigDecimal("0");
        BigDecimal consum2 = new BigDecimal("0");
        if (collect2.size() >0){
             consum1 = collect2.stream().map(Order::getRealMoney)
                     .collect(Collectors.toList()).stream()
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
        }
        List<BigDecimal> collect3 = orderCourseService.selectList(new EntityWrapper<OrderCourse>()
                .eq("userId", id)
                .eq("state", 2)).stream().map(OrderCourse::getAmount)
                .collect(Collectors.toList());
        if (orderCourseService.selectList(new EntityWrapper<OrderCourse>()
                .eq("userId", id)
                .eq("state", 2)).size()>0){
            consum2 = collect3.stream()
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
        }
        BigDecimal add = consum1.add(consum2);
        res.setConsumeMoney(add);
        return ResultUtil.success(res);
    }
    @ResponseBody
    @PostMapping("/inviteUserList")
    @ApiOperation(value = "用户详情-已邀请用户列表", tags = {"用户管理"})
    public ResultUtil<PageInfo<InviteUserVO>> inviteUserList(AppUserQuery query) {
        List<InviteUserVO> res = appUserService.inviteUserList(query);
//        PageHelper.startPage(query.getPageNum(),query.getPageSize());
        PageInfo<InviteUserVO> info=new PageInfo<>(res);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/teamList")
    @ApiOperation(value = "用户团队销售统计", tags = {"用户管理"})
    public ResultUtil<PageInfo<TeamDetailVO>> teamList(TeamQuery query) {
        List<TeamDetailVO> res = new ArrayList<>();
        EntityWrapper<AppUser> wrapper = new EntityWrapper<>();
        wrapper.ne("state",3);
        wrapper.isNotNull("phone");
        if (StringUtils.hasLength(query.getName())){
            wrapper.like("name",query.getName());
        }
        if (StringUtils.hasLength(query.getPhone())){
            wrapper.like("phone",query.getPhone());
        }
        // 所有的用户ids
        List<Integer> userIds = appUserService.selectList(wrapper)
                .stream().map(AppUser::getId).collect(Collectors.toList());
        for (Integer userId : userIds) {
            // 查询这个用户获取了多少团队消费奖励
            TeamDetailVO teamDetailVO = new TeamDetailVO();
            AppUser appUser = appUserService.selectById(userId);
            teamDetailVO.setId(userId);
            teamDetailVO.setName(appUser.getName());
            teamDetailVO.setPhone(appUser.getPhone());
            EntityWrapper<Invite> wrapper1 = new EntityWrapper<>();
            wrapper1.eq("giftUserId", userId).eq("type", 2);
            if (query.getStartTime()!=null && query.getEndTime()!=null){
                query.getEndTime().setHours(23);
                query.getEndTime().setMinutes(59);
                query.getEndTime().setSeconds(59);
                wrapper1.ge("insertTime",query.getStartTime());
                wrapper1.le("insertTime",query.getEndTime());
            }
            // 查询团队消费奖励记录
            List<BigDecimal> collect = inviteService.selectList(wrapper1).stream()
                    .map(Invite::getAmount).collect(Collectors.toList());
            BigDecimal consume = collect.stream()
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            // 查询这个用户有多少团队成员
            // 查询这个用户邀请了 哪些人
            List<Integer> inviteUserId = appUserService.selectList(new EntityWrapper<AppUser>()
                    .eq("inviteUserId", userId)).stream().map(AppUser::getId)
                    .collect(Collectors.toList());
            if (inviteUserId.size()!=0){
                // 再查询这些用户邀请了哪些人 这些人就是这个用户的团队成员
                int inviteUserId1 = appUserService.selectList(new EntityWrapper<AppUser>()
                        .in("inviteUserId", inviteUserId)).size();
                teamDetailVO.setCount(inviteUserId1);
            }else{
                teamDetailVO.setCount(0);
            }
            teamDetailVO.setAmount(consume);
            res.add(teamDetailVO);
        }
        List<TeamDetailVO> sortedList = res.stream()
                .sorted(Comparator.comparing(TeamDetailVO::getAmount).reversed())
                .collect(Collectors.toList());
//        PageHelper.startPage(query.getPageNum(),query.getPageSize());
        PageInfo<TeamDetailVO> info=new PageInfo<>(sortedList);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/balanceDetail")
    @ApiOperation(value = "用户详情-资金记录列表", tags = {"用户管理"})
    public ResultUtil<PageInfo<UserDetailVO>> balanceDetail(BalanceQuery query) {
        WalletVO walletVO = new WalletVO();
        List<UserDetailVO> detail = new ArrayList<>();
        BigDecimal balance = appUserService.selectById(query.getId()).getBalance();
        walletVO.setBalance(balance);
        List<String> strings = new ArrayList<>();
        strings.add("insertTime");
        Wrapper<Recharge> eq1 = new EntityWrapper<Recharge>()
                .eq("userId", query.getId())
                .eq("state", 2)
                .orderDesc(strings);
        // 如果传递了年份和月份,则添加时间条件
        if (query.getStartTime() != null && query.getEndTime() != null) {
            query.getEndTime().setHours(23);
            query.getEndTime().setMinutes(59);
            query.getEndTime().setSeconds(59);
            eq1.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
        }
        // 查询充值记录
        List<Recharge> recharges = rechargeService.selectList(eq1);
        for (Recharge recharge : recharges) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("+"+recharge.getAmount().toString());
            userDetailVO.setType("充值");
            userDetailVO.setTypeId(1);
            userDetailVO.setInsertTime(recharge.getInsertTime());
            detail.add(userDetailVO);
        }
        // 查询购课记录 只查询钱包支付的
        Wrapper<OrderCourse> eq2 = new EntityWrapper<OrderCourse>()
                .eq("userId", query.getId())
                .orderDesc(strings)
//                .eq("payType", 3)
                .eq("state", 2);
        // 如果传递了年份和月份,则添加时间条件
        if (query.getStartTime() != null && query.getEndTime() != null) {
            eq2.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
        }
        List<OrderCourse> orderCourses = orderCourseService.selectList(eq2);
        for (OrderCourse orderCours : orderCourses) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("-"+orderCours.getRealMoney());
            userDetailVO.setType("购买课程");
            userDetailVO.setTypeId(2);
            userDetailVO.setInsertTime(orderCours.getInsertTime());
            detail.add(userDetailVO);
        }
        Wrapper<Order> eq = new EntityWrapper<Order>()
                .eq("userId", query.getId())
                .eq("payType", 3)
                .orderDesc(strings)
                .eq("state", 2);
        // 如果传递了年份和月份,则添加时间条件
        if (query.getStartTime() != null && query.getEndTime() != null) {
            eq.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
        }
        List<Order> orders = orderService.selectList(eq);
        // 查询购买套餐记录 只查询钱包支付的
        for (Order order : orders) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("-"+order.getRealMoney());
            userDetailVO.setType("购买套餐");
            userDetailVO.setTypeId(2);
            userDetailVO.setInsertTime(order.getInsertTime());
            detail.add(userDetailVO);
        }
        // 查询提现记录
        Wrapper<Withdrawal> eq3 = new EntityWrapper<Withdrawal>()
                .eq("userId", query.getId())
                .orderDesc(strings);
        // 如果传递了年份和月份,则添加时间条件
        if (query.getStartTime() != null && query.getEndTime() != null) {
            eq3.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
        }
        List<Withdrawal> withdrawals = withdrawalService.selectList(eq3);
        for (Withdrawal withdrawal : withdrawals) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setTypeId(3);
            switch (withdrawal.getState()){
                case 1:
                    userDetailVO.setInsertTime(withdrawal.getInsertTime());
                    userDetailVO.setAmount("-"+withdrawal.getAmount());
                    userDetailVO.setType("提现");
                    break;
                case 2:
                    userDetailVO.setInsertTime(withdrawal.getInsertTime());
                    userDetailVO.setAmount("-"+withdrawal.getAmount());
                    userDetailVO.setType("提现");
                    break;
                case 3:
                    userDetailVO.setInsertTime(withdrawal.getRefuseTime());
                    userDetailVO.setAmount("+"+withdrawal.getAmount());
                    userDetailVO.setType("提现失败,提现金额返回至余额");
                    // 添加一条提醒扣款明细
                    UserDetailVO userDetailVO1 = new UserDetailVO();
                    userDetailVO1.setTypeId(3);
                    userDetailVO1.setInsertTime(withdrawal.getInsertTime());
                    userDetailVO1.setAmount("-"+withdrawal.getAmount());
                    userDetailVO1.setType("提现");
                    detail.add(userDetailVO1);
                    break;
            }
            detail.add(userDetailVO);
        }
        // 查询是否有邀请过用户 获得消费奖励
        Wrapper<Invite> eq4 = new EntityWrapper<Invite>()
                .eq("giftUserId", query.getId())
                .eq("type",1)
                .orderDesc(strings);
        // 如果传递了年份和月份,则添加时间条件
        if (query.getStartTime() != null && query.getEndTime() != null) {
            eq4.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
        }
        List<Invite> giftUserId = inviteService.selectList(eq4);
        for (Invite invite : giftUserId) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("+"+invite.getAmount());
            userDetailVO.setTypeId(4);
            AppUser appUser = appUserService.selectById(invite.getUserId());
            userDetailVO.setType("好友消费:"+appUser.getName()+"消费了"+invite.getConsume()+"元");
            userDetailVO.setInsertTime(invite.getInsertTime());
            detail.add(userDetailVO);
        }
        AppUser appUser = appUserService.selectById(query.getId());
        // 查询红包发放记录
        Wrapper<RedPackage> eq5 = new EntityWrapper<RedPackage>();
        eq5.ge("insertTime",appUser.getInsertTime())
                .orderDesc(strings);
        if (query.getStartTime() != null && query.getEndTime() != null) {
            eq5.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
        }
        List<RedPackage> redPackages = redPackageService.selectList(eq5);
        for (RedPackage redPackage : redPackages) {
            UserDetailVO userDetailVO = new UserDetailVO();
            userDetailVO.setAmount("+"+redPackage.getAmount());
            userDetailVO.setTypeId(5);
            userDetailVO.setType("平台红包");
            userDetailVO.setInsertTime(redPackage.getInsertTime());
            detail.add(userDetailVO);
        }
        // 如果筛选了类型
        if (query.getType()!=null){
            detail = detail.stream().filter(t -> t.getTypeId() == query.getType()).collect(Collectors.toList());
        }
        List<UserDetailVO> sortedDetail = detail.stream()
                .sorted(Comparator.comparing(UserDetailVO::getInsertTime).reversed()) // 根据 insertTime 从大到小排序
                .collect(Collectors.toList());
//        PageHelper.startPage(query.getPageNum(),query.getPageSize());
        PageInfo<UserDetailVO> info=new PageInfo<>(sortedDetail);
        return ResultUtil.success(info);
    }
}
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/BannerController.java
New file
@@ -0,0 +1,128 @@
package com.stylefeng.guns.modular.code.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.stylefeng.guns.modular.system.dto.OrderQuery;
import com.stylefeng.guns.modular.system.model.Package;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.vo.OrderDetailVO;
import com.stylefeng.guns.modular.system.vo.OrderListVO;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * @author 无关风月
 * @Date 2024/2/6 18:25
 */
@Slf4j
@RestController
@RequestMapping("")
public class BannerController {
    @Autowired
    private IFitnessTypeService fitnessTypeService;
    @Autowired
    private IFitnessPositionService fitnessPositionService;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private ICourseService courseService;
    @Autowired
    private ICourseVideoService courseVideoService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private IOrderCourseService orderCourseService;
    @Autowired
    private ICouponService couponService;
    @Autowired
    private IPackageService packageService;
    @Autowired
    private IProtocolService protocolService;
    @Autowired
    private IBannerService bannerService;
    @ResponseBody
    @PostMapping("/base/banner/list")
    @ApiOperation(value = "列表查询", tags = {"banner管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "banner名称", name = "name"),
            @ApiImplicitParam(value = "跳转页面", name = "pageName"),
            @ApiImplicitParam(value = "状态1上架2下架", name = "state"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"),
    })
    public ResultUtil<PageInfo<Banner>> list(String name, String pageName,Integer state, Integer pageNum, Integer pageSize) {
        EntityWrapper<Banner> wrapper = new EntityWrapper<>();
        if (StringUtils.hasLength(name)){
            wrapper.like("name",name);
        }
        if (StringUtils.hasLength(pageName)){
            wrapper.like("pageName",pageName);
        }
        if (state!=null){
            wrapper.eq("state",state);
        }
        List<String> strings = new ArrayList<>();
        strings.add("id");
        wrapper.orderDesc(strings);
        wrapper.ne("state",3);
        List<Banner> res = bannerService.selectList(wrapper);
//        PageHelper.startPage(pageNum,pageSize);
        PageInfo<Banner> info=new PageInfo<>(res);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/base/banner/addOrUpdateBanner")
    @ApiOperation(value = "banner新增/修改", tags = {"banner管理"})
    public ResultUtil courseList(Banner banner) {
        if (banner.getId()!=null){
            bannerService.updateById(banner);
        }else{
            bannerService.insert(banner);
        }
        return ResultUtil.success();
    }
    @ResponseBody
    @PostMapping("/base/banner/bannerInfo")
    @ApiOperation(value = "banner详情", tags = {"banner管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "bannerId", name = "id"),
    })
    public ResultUtil<Banner> bannerInfo(Integer id) {
        Banner banner = bannerService.selectById(id);
        return ResultUtil.success(banner);
    }
    @ResponseBody
    @PostMapping("/base/banner/changeState")
    @ApiOperation(value = "修改banner状态", tags = {"banner管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "bannerid", name = "id"),
            @ApiImplicitParam(value = "状态1=上架 2=下架 3=删除", name = "state"),
    })
    public ResultUtil changeState(Integer id,Integer state) {
        Banner banner = bannerService.selectById(id);
        banner.setState(state);
        bannerService.updateById(banner);
        return ResultUtil.success();
    }
}
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/CouponController.java
New file
@@ -0,0 +1,207 @@
package com.stylefeng.guns.modular.code.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.stylefeng.guns.core.shiro.ShiroKit;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.Page;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.vo.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 优惠券控制器
 */
@Controller
@RequestMapping("")
public class CouponController {
    @Autowired
    private IDeptService deptService;
    @Autowired
    private IPageService pageService;
    @Autowired
    private IProtocolService protocolService;
    @Autowired
    private IUseGuideService useGuideService;
    @Autowired
    private ISysSetService sysSetService;
    @Autowired
    private IRedPackageService redPackageService;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private ICouponService couponService;
    @Autowired
    private IFitnessPositionService fitnessPositionService;
    @Autowired
    private IFitnessTypeService fitnessTypeService;
    @Autowired
    private ICourseService courseService;
    @ResponseBody
    @PostMapping("/base/coupon/couponList")
    @ApiOperation(value = "优惠券列表", tags = {"优惠券管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "优惠券名称", name = "couponName"),
            @ApiImplicitParam(value = "有效期类型", name = "timeType"),
            @ApiImplicitParam(value = "发放方式", name = "grantType"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"),
    })
    public ResultUtil<PageInfo<CouponListVO>> couponList(String couponName,Integer timeType,Integer grantType,Integer pageNum,Integer pageSize) {
        List<Coupon> res = couponService.couponList(couponName,timeType,grantType);
        List<CouponListVO> result = new ArrayList<>();
        for (Coupon re : res) {
            CouponListVO couponListVO = new CouponListVO();
            BeanUtils.copyProperties(re,couponListVO);
            // 领取后
            if (re.getTimeType()==1){
                couponListVO.setTime(re.getAfterDay()+"天内有效");
            }else{
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                String s = format.format(re.getStartTime());
                String e = format.format(re.getEndTime());
                // 指定时间
                couponListVO.setTime(s+"至"+e);
            }
            result.add(couponListVO);
        }
//        PageHelper.startPage(pageNum,pageSize);
        PageInfo<CouponListVO> info=new PageInfo<>(result);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/base/coupon/couponReceive")
    @ApiOperation(value = "领取记录", tags = {"优惠券管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "用户名称", name = "userName"),
            @ApiImplicitParam(value = "联系电话", name = "phone"),
            @ApiImplicitParam(value = "领取类型1=打卡赠送 2=购课赠送 ", name = "receiveType"),
            @ApiImplicitParam(value = "状态 1= 未使用 2=已使用 3=已过期", name = "state"),
            @ApiImplicitParam(value = "优惠券id", name = "id"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"),
    })
    public ResultUtil<PageInfo<CouponReceiveVO>> couponReceive
            (String userName,String phone,
            Integer state,Integer receiveType,Integer id,
             Integer pageNum,Integer pageSize) {
        CouPonQuery couPonQuery = new CouPonQuery();
        couPonQuery.setId(id);
        couPonQuery.setPhone(phone);
        couPonQuery.setUserName(userName);
        couPonQuery.setReceiveType(receiveType);
        couPonQuery.setState(state);
        couPonQuery.setPageNum(pageNum);
        couPonQuery.setPageSize(pageSize);
        List<CouponReceiveVO> res= couponService.couponReceive(couPonQuery);
        for (CouponReceiveVO re : res) {
            if (re.getReceiveType()==1||re.getReceiveType()==2){
                re.setReceiveType(1);
            }else{
                re.setReceiveType(2);
            }
            if (re.getState()==1){
                // 如果未使用 要判断这张优惠券是否过期了
                if (new Date().after(re.getEndTime())){
                    re.setState(3);
                }
            }
        }
//        PageHelper.startPage(pageNum,pageSize);
        PageInfo<CouponReceiveVO> info=new PageInfo<>(res);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/base/coupon/addCoupon")
    @ApiOperation(value = "优惠券添加/编辑", tags = {"优惠券管理"})
    public ResultUtil addCoupon(Coupon coupon) {
        if (coupon.getStartTime()!=null){
            Date startTime = coupon.getStartTime();
            Date endTime = coupon.getEndTime();
            LocalDateTime localStartDateTime = LocalDateTime.ofInstant(startTime.toInstant(), java.time.ZoneId.systemDefault());
            LocalDateTime localEndDateTime = LocalDateTime.ofInstant(endTime.toInstant(), java.time.ZoneId.systemDefault());
            // 设置开始时间的时分秒为00:00:00
            LocalDateTime startOfDay = localStartDateTime.toLocalDate().atStartOfDay();
            Timestamp startTimestamp = Timestamp.valueOf(startOfDay);
            startTime = new Date(startTimestamp.getTime());
            // 设置结束时间的时分秒为23:59:59
            LocalDate endDate = localEndDateTime.toLocalDate();
            LocalDateTime endOfDay = endDate.atTime(23, 59, 59);
            Timestamp endTimestamp = Timestamp.valueOf(endOfDay);
            endTime = new Date(endTimestamp.getTime());
            coupon.setStartTime(startTime);
            coupon.setEndTime(endTime);
        }
        if (coupon.getId()==null){
            // 添加
            couponService.insert(coupon);
            return ResultUtil.success("添加成功");
        }else {
            // 编辑
            couponService.updateById(coupon);
            return ResultUtil.success("编辑成功");
        }
    }
    @ResponseBody
    @PostMapping("/base/coupon/deleteCoupon")
    @ApiOperation(value = "优惠券删除", tags = {"优惠券管理"})
    public ResultUtil addCoupon(Integer id) {
        Coupon coupon = couponService.selectById(id);
        coupon.setIsDelete(1);
        couponService.updateById(coupon);
        return ResultUtil.success("删除成功");
    }
    @ResponseBody
    @PostMapping("/base/coupon/courseList")
    @ApiOperation(value = "优惠券添加/编辑选择课程", tags = {"优惠券管理"})
    public ResultUtil<List<FitnessPosition>> courseList() {
        List<FitnessPosition> fitnessPositions = new ArrayList<>();
        // 部位ids
        List<Integer> state = fitnessPositionService
                .selectList(new EntityWrapper<FitnessPosition>()
                        .eq("isDelete", 0)).stream().map(FitnessPosition::getId)
                .distinct()
                .collect(Collectors.toList());
        for (Integer position : state) {
            FitnessPosition fitnessPosition = new FitnessPosition();
            fitnessPosition.setId(position);
            FitnessPosition fitnessPosition1 = fitnessPositionService.selectById(position);
            String name = fitnessTypeService.selectById(fitnessPosition1.getTypeId()).getName();
            fitnessPosition.setName(name+"|"+fitnessPosition1.getName());
            fitnessPositions.add(fitnessPosition);
        }
        return ResultUtil.success(fitnessPositions);
    }
    @ResponseBody
    @PostMapping("/base/coupon/couponDetail")
    @ApiOperation(value = "查看详情", tags = {"优惠券管理"})
    public ResultUtil<Coupon> couponDetail(Integer id) {
        Coupon coupon = couponService.selectById(id);
        return ResultUtil.success(coupon);
    }
}
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/CourseController.java
New file
@@ -0,0 +1,174 @@
package com.stylefeng.guns.modular.code.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.stylefeng.guns.modular.system.dto.CourseDTO;
import com.stylefeng.guns.modular.system.dto.CourseQuery;
import com.stylefeng.guns.modular.system.model.Course;
import com.stylefeng.guns.modular.system.model.CourseVideo;
import com.stylefeng.guns.modular.system.model.FitnessPosition;
import com.stylefeng.guns.modular.system.model.FitnessType;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
import com.stylefeng.guns.modular.system.vo.CouponListVO;
import com.stylefeng.guns.modular.system.vo.CourseList;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author 无关风月
 * @Date 2024/2/6 18:25
 */
@Slf4j
@RestController
@RequestMapping("")
public class CourseController {
    @Autowired
    private IFitnessTypeService fitnessTypeService;
    @Autowired
    private IFitnessPositionService fitnessPositionService;
    @Autowired
    private ICourseService courseService;
    @Autowired
    private ICourseVideoService courseVideoService;
    @ResponseBody
    @PostMapping("/base/course/typeList")
    @ApiOperation(value = "所属类型下拉列表", tags = {"课程"})
    public ResultUtil<List<FitnessType>> typeList() {
        List<FitnessType> types = fitnessTypeService.selectList(new EntityWrapper<FitnessType>()
                .eq("isDelete", 0));
        return ResultUtil.success(types);
    }
    @ResponseBody
    @PostMapping("/base/course/positionList")
    @ApiOperation(value = "所属部位下拉列表", tags = {"课程"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "类型id", name = "id"),
    })
    public ResultUtil<List<FitnessPosition>> positionList(Integer id) {
        List<FitnessPosition> types = fitnessPositionService.selectList(new EntityWrapper<FitnessPosition>()
                .eq("typeId",id)
                .eq("isDelete", 0));
        return ResultUtil.success(types);
    }
    @ResponseBody
    @PostMapping("/base/course/updateState")
    @ApiOperation(value = "上架/下架/删除", tags = {"课程"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "课程id", name = "id"),
            @ApiImplicitParam(value = "状态1=上架 2=下架 3=删除", name = "state"),
    })
    public ResultUtil updateState(Integer id,Integer state) {
        Course course = courseService.selectById(id);
        course.setState(state);
        courseService.updateById(course);
        return ResultUtil.success();
    }
    @ResponseBody
    @PostMapping("/base/course/courseDetail")
    @ApiOperation(value = "查看详情", tags = {"课程"})
    public ResultUtil<CourseDTO> courseList(Integer id) {
        Course course = courseService.selectById(id);
        CourseDTO courseDTO = new CourseDTO();
        courseDTO.setId(course.getId());
        courseDTO.setCourseName(course.getCourseName());
        courseDTO.setIsFree(course.getIsFree());
        courseDTO.setDifficulty(course.getDifficulty());
        courseDTO.setTypeId(course.getTypeId());
        courseDTO.setPositionId(course.getPositionId());
        courseDTO.setIntroduce(course.getIntroduce());
        courseDTO.setCoverImg(course.getCoverImg());
        courseDTO.setSort(course.getSort());
        courseDTO.setTime(course.getTime());
        courseDTO.setAllTime(course.getAllTime());
        courseDTO.setPositionName(fitnessPositionService.selectById(course.getPositionId()).getName());
        List<CourseVideo> courseId = courseVideoService.selectList(new EntityWrapper<CourseVideo>()
                .eq("courseId", id));
        courseDTO.setVideos(courseId);
        return ResultUtil.success(courseDTO);
    }
    @ResponseBody
    @PostMapping("/base/course/courseList")
    @ApiOperation(value = "列表查询", tags = {"课程"})
    public ResultUtil<PageInfo<CourseList>> courseList(CourseQuery query) {
        List<CourseList> res = courseService.courseList(query);
//        PageHelper.startPage(query.getPageNum(),query.getPageSize());
        PageInfo<CourseList> info=new PageInfo<>(res);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @PostMapping("/base/course/addOrUpdate")
    @ApiOperation(value = "课程添加/编辑", tags = {"课程"})
    public ResultUtil courseList(@RequestBody CourseDTO dto) {
        if (dto.getId()==null){
            // 新增
            Course course = new Course();
            course.setCourseName(dto.getCourseName());
            course.setCoverImg(dto.getCoverImg());
            course.setIntroduce(dto.getIntroduce());
            course.setDifficulty(dto.getDifficulty());
            course.setTime(dto.getTime());
            course.setIsFree(dto.getIsFree());
            course.setSort(dto.getSort());
            course.setAllTime(dto.getAllTime());
            course.setState(1);
            course.setPositionId(dto.getPositionId());
            course.setTypeId(dto.getTypeId());
            courseService.insert(course);
            // 添加视频
            List<CourseVideo> videos = dto.getVideos();
            for (CourseVideo video : videos) {
                video.setTime(video.getMinute()*60 + video.getSecond());
                video.setCourseId(course.getId());
                courseVideoService.insert(video);
            }
            return ResultUtil.success("添加成功");
        }else{
            // 编辑
            Course course = courseService.selectById(dto.getId());
            if (course!=null){
                course.setCourseName(dto.getCourseName());
                course.setCoverImg(dto.getCoverImg());
                course.setIntroduce(dto.getIntroduce());
                course.setPositionId(dto.getPositionId());
                course.setTypeId(dto.getTypeId());
                course.setDifficulty(dto.getDifficulty());
                course.setTime(dto.getTime());
                course.setIsFree(dto.getIsFree());
                course.setSort(dto.getSort());
                course.setAllTime(dto.getAllTime());
                courseService.updateById(course);
            }
            if (dto.getVideos().size()!=0){
                // 如果修改了视频列表 将之前的删除 重新添加
                List<CourseVideo> courseId = courseVideoService.selectList(new EntityWrapper<CourseVideo>()
                        .eq("courseId", dto.getId()));
                for (CourseVideo courseVideo : courseId) {
                    courseVideoService.deleteById(courseVideo);
                }
                for (CourseVideo video : dto.getVideos()) {
                    video.setTime(video.getMinute()*60 + video.getSecond());
                    video.setCourseId(course.getId());
                    courseVideoService.insert(video);
                }
            }
            return ResultUtil.success("编辑成功");
        }
    }
    public static void main(String[] args) throws Exception {
        String randomCode = UUIDUtil.getRandomCode(8);
        System.err.println(randomCode);
    }
}
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/FeedbackController.java
New file
@@ -0,0 +1,125 @@
package com.stylefeng.guns.modular.code.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.stylefeng.guns.core.base.tips.ErrorTip;
import com.stylefeng.guns.core.common.annotion.BussinessLog;
import com.stylefeng.guns.core.common.constant.Const;
import com.stylefeng.guns.core.common.constant.dictmap.UserDict;
import com.stylefeng.guns.core.common.constant.state.ManagerStatus;
import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
import com.stylefeng.guns.core.exception.GunsException;
import com.stylefeng.guns.core.log.LogManager;
import com.stylefeng.guns.core.log.factory.LogTaskFactory;
import com.stylefeng.guns.core.mutidatasource.annotion.DataSource;
import com.stylefeng.guns.core.node.ZTreeNode;
import com.stylefeng.guns.core.shiro.ShiroKit;
import com.stylefeng.guns.core.shiro.ShiroUser;
import com.stylefeng.guns.core.support.HttpKit;
import com.stylefeng.guns.core.util.HttpUtils;
import com.stylefeng.guns.core.util.JwtTokenUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.UserMapper;
import com.stylefeng.guns.modular.system.dto.FeedbackQuery;
import com.stylefeng.guns.modular.system.dto.TreeBean;
import com.stylefeng.guns.modular.system.factory.UserFactory;
import com.stylefeng.guns.modular.system.model.Banner;
import com.stylefeng.guns.modular.system.model.Feedback;
import com.stylefeng.guns.modular.system.model.User;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.transfer.UserDto;
import com.stylefeng.guns.modular.system.util.ListToTreeUtil;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.vo.CouponListVO;
import com.stylefeng.guns.modular.system.vo.FeedbackVO;
import com.stylefeng.guns.modular.system.warpper.res.DistrictRes;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.naming.NoPermissionException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.*;
import static com.stylefeng.guns.core.support.HttpKit.getIp;
@Controller
@RequestMapping("/base/feedback")
public class FeedbackController {
    protected HttpServletResponse getHttpServletResponse() {
        return HttpKit.getResponse();
    }
    protected HttpServletRequest getHttpServletRequest() {
        return HttpKit.getRequest();
    }
    @Autowired
    private IUserService userService;
    @Autowired
    private IBannerService bannerService;
    @Autowired
    private ISysDataTypeService typeService;
    @Autowired
    private IMenuService menuService;
    @Autowired
    private IRegionService regionService;
    @Autowired
    private IFeedbackService feedbackService;
    @ResponseBody
    @GetMapping("/listAll")
    @ApiOperation(value = "列表查询", tags = {"反馈管理"})
    public ResultUtil<PageInfo<FeedbackVO>> listAll(FeedbackQuery query){
        if (query.getEndTime()!=null){
            query.getEndTime().setHours(23);
            query.getEndTime().setMinutes(59);
            query.getEndTime().setSeconds(59);
        }
        List<FeedbackVO> res = feedbackService.listAll(query);
//        PageHelper.startPage(query.getPageNum(),query.getPageSize());
        PageInfo<FeedbackVO> info=new PageInfo<>(res);
        return ResultUtil.success(info);
    }
    @ResponseBody
    @GetMapping("/detail")
    @ApiOperation(value = "查看详情", tags = {"反馈管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "反馈id", name = "id"),
    })
    public ResultUtil<Feedback> detail(Integer id){
        Feedback feedback = feedbackService.selectById(id);
        return ResultUtil.success(feedback);
    }
    @ResponseBody
    @GetMapping("/handle")
    @ApiOperation(value = "处理", tags = {"反馈管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "反馈id", name = "id"),
    })
    public ResultUtil handle(Integer id){
        Feedback feedback = feedbackService.selectById(id);
        feedback.setState(2);
        feedbackService.updateById(feedback);
        return ResultUtil.success();
    }
}
Diff truncated after the above file
guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/FindController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/FitnessController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/HostController.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/HouseController.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/MediumController.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/MoneyController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/OrderController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/OssController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/ReportController.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysBannerController.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysDeptController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysRoleController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SystemController.java guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/UserController.java guns-management/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java guns-management/src/main/java/com/stylefeng/guns/modular/system/controller/SysRegionController.java guns-management/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/AppUserMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/BannerMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHouseResourceMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CollectionHousingDemandMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CouponMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CouponReceiveMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CourseMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/CourseVideoMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/DeptMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/EncyclopedicKnowledgeUpvoteMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FeedBackMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FindCommentMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FindMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FindReportMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessPositionMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/FitnessTypeMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HouseResourceMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HouseTypeMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandDistrictMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/HousingDemandMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/InviteMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/LoginHistoryMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/MessageMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCourseMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/OrderMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/PackageMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/PageMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/ProtocolMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/RecipientMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/RedPackageMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHouseResourceMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/ReportHousingDemandMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/SearchHistoryConditionMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/SysSetMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/TAppUserAuditRecordMapper.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/TurnMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UpdateSetMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UseGuideMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UserCollectMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UserMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/UserRecordMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppUserMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BannerMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHouseResourceMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CollectionHousingDemandMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CouponReceiveMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseVideoMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeptMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EncyclopedicKnowledgeUpvoteMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedBackMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindCommentMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FindReportMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessPositionMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FitnessTypeMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseResourceMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HouseTypeMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandDistrictMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/HousingDemandMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InviteMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginHistoryMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MessageMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCourseMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PackageMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PageMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProtocolMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RecipientMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPackageMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHouseResourceMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReportHousingDemandMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SearchHistoryConditionMapper.xml (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysSetMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TurnMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UpdateSetMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UseGuideMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCollectMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRecordMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/AggrementDTO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/AgreementDTO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/AppUserQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/BalanceQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/CourseDTO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/CourseQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/DeptQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FeedbackQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FindCommentQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FindQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FindReportQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/FitnessPositionQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/OSQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/OrderQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/TeamQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/TreeBean.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/UseGuidDTO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/dto/UserDto.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/AppUser.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Banner.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHouseResource.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CollectionHousingDemand.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Coupon.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CouponReceive.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Course.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/CourseVideo.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Dept.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledge.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/EncyclopedicKnowledgeUpvote.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FeedBack.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Find.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FindComment.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FindReport.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FitnessPosition.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FitnessType.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HouseResource.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HouseType.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemand.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/HousingDemandDistrict.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Invite.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/LoginHistory.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Message.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/MoneyVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Order.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/OrderCourse.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Package.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Page.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Protocol.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Recharge.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Recipient.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/RedPackage.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Region.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/ReportHouseResource.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/ReportHousingDemand.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Role.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/SearchHistoryCondition.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/SysSet.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/TAppUserAuditRecord.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Turn.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UpdateSet.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UseGuide.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/User.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UserCollect.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/UserRecord.java guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IAppUserService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IBannerService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHouseResourceService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICollectionHousingDemandService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICouponReceiveService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICouponService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICourseService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ICourseVideoService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IDeptService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IEncyclopedicKnowledgeUpvoteService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFeedBackService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFindCommentService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFindReportService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFindService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessPositionService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IFitnessTypeService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHouseResourceService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHouseTypeService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandDistrictService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IHousingDemandService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IInviteService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ILoginHistoryService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IMessageService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCourseService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IPackageService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IPageService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IProtocolService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IRecipientService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IRedPackageService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IReportHouseResourceService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IReportHousingDemandService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ISearchHistoryConditionService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ISysSetService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/ITurnService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUpdateSetService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUseGuideService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUserCollectService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUserRecordService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IUserService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/TAppUserAuditRecordService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/BannerServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHouseResourceServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CollectionHousingDemandServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponReceiveServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CouponServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/CourseVideoServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeptServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/EncyclopedicKnowledgeUpvoteServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedBackServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindCommentServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindReportServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FindServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessPositionServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/FitnessTypeServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseTypeServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandDistrictServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/HousingDemandServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/InviteServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginHistoryServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/MessageServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCourseServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/PackageServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/PageServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProtocolServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/RecipientServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPackageServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHouseResourceServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReportHousingDemandServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/SearchHistoryConditionServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysSetServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAppUserAuditRecordServiceImpl.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/TurnServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UpdateSetServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UseGuideServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCollectServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRecordServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java guns-management/src/main/java/com/stylefeng/guns/modular/system/transfer/UserDto.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/Constant.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/DateUtils.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/FileUtil.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/HWSendSms.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/MyScheduledTasks.java (deleted) guns-management/src/main/java/com/stylefeng/guns/modular/system/util/ObsUploadUtil.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/Page.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java guns-management/src/main/java/com/stylefeng/guns/modular/system/util/UploadVideoUtil.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/AppUserDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/AppUserVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/BMIVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/BalanceDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CSVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CommentVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CompeleteVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/ConstellationVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouPonQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouponListVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouponReceiveVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CouponVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CourseDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/CourseList.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/DeptVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FeedbackVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FindReportDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FindReportVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FindVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FitnessPositionVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/InviteUserVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/MessageQuery.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/MessagesVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/MoneyDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/OperationalDataVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/OrderDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/OrderListVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/PackageDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/PackageVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/RechargeListVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/RedPackageVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/SearchList.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/SystemSetVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/TeamDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/TeamVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/UserDetailVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/UserInfoVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/WalletVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/WithdtawalVO.java guns-management/src/main/java/com/stylefeng/guns/modular/system/warpper/PointLocation.java (deleted) guns-management/src/main/resources/application-dev.yml guns-management/src/main/resources/application.yml