puzhibing
2023-05-22 8d5196a9663570735148c023367672cc1d86615c
提交基础代码
671个文件已添加
118448 ■■■■■ 已修改文件
driver/guns-admin/pom.xml 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/GunsApplication.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/GunsServletInitializer.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/EhCacheConfig.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/RedisConfig.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/SpringSessionConfig.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/SwaggerConfig.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/datasource/MultiDataSourceConfig.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/datasource/SingleDataSourceConfig.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/properties/BeetlProperties.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/properties/GunsProperties.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/web/BeetlConfig.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/web/ShiroConfig.java 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/config/web/WebConfig.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/aop/GlobalExceptionHandler.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/aop/LogAop.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/aop/PermissionAop.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/beetl/BeetlConfiguration.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/beetl/ShiroExt.java 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/annotion/BussinessLog.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/annotion/Permission.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/annotion/ServiceLog.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/aspect/ServiceLogAspect.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/Const.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/DatasourceEnum.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/JwtConstants.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/cache/Cache.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/cache/CacheKey.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/DeleteDict.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/DeptDict.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/DictMap.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/LogDict.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/MenuDict.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/NoticeMap.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/RoleDict.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/UserDict.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/base/AbstractDictMap.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/base/SystemDict.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/factory/DictFieldWarpperFactory.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/ConstantFactory.java 335 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/IConstantFactory.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/MutiStrFactory.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/PageFactory.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/BizLogType.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/ExpenseState.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/LogSucceed.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/LogType.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/ManagerStatus.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/MenuOpenStatus.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/MenuStatus.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/Order.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/exception/BizExceptionEnum.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/exception/InvalidKaptchaException.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/intercept/GunsUserFilter.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/intercept/RestApiInteceptor.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/intercept/SessionHolderInterceptor.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/listener/ConfigListener.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/LogManager.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/LogObjectHolder.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/factory/LogFactory.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/factory/LogTaskFactory.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/ShiroDbRealm.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/ShiroKit.java 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/ShiroUser.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/check/ICheck.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/check/PermissionCheckFactory.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/check/PermissionCheckManager.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/factory/IShiro.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/factory/ShiroFactroy.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/tag/DictSelectorTag.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/ApiMenuFilter.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/Contrast.java 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/GetMobile.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/HttpUtils.java 312 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/JwtTokenUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/KaptchaUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/code/controller/CodeController.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/code/factory/DefaultTemplateFactory.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/code/service/TableService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/CommercialController.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java 994 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverWorkController.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/HtmlController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/ImgController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/MainContentController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/OrderController.java 520 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/SystemBulletinController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/SystemConfigController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/SystemMessageController.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/YouTuiController.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthIntercepter.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthService.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthenticationKit.java 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/Configuration.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/HMACSHA1.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/HashKit.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/UrlEncoderUtils.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/AccountChangeDetailMapper.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/AgentMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/AppUserMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/BranchOfficeMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CancelOrderMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CashWithdrawalMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CommercialMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CommercialUserEjectMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CouponMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DeptMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DictMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DriverBankMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DriverMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DriverWorkMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/EditionMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/ExpenseMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/HtmlMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/ImgMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/JoiningRequirementsMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/LoginLogMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/MainContentMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/MenuMapper.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/NoticeMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OperationLogMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OrderMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OrderRefusalMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OrderTransferMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RechargeRecordMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RelationMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RevenueMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RoleMapper.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemBulletinMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemBulletinUserMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemConfigMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemMessageMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/UserMapper.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/UserToCouponMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/WeatherCityMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/YouTuiDriverMapper.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/YouTuiMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/AccountChangeDetailMapper.xml 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/AgentMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/AppUserMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/BranchOfficeMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CancelOrderMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CashWithdrawalMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CommercialMapper.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CommercialUserEjectMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CouponMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DeptMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DictMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DriverBankMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DriverMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DriverWorkMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/EditionMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/ExpenseMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/HtmlMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/ImgMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/JoiningRequirementsMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/LoginLogMapper.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/MainContentMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/MenuMapper.xml 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/NoticeMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OperationLogMapper.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OrderMapper.xml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OrderRefusalMapepr.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OrderTransferMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RechargeRecordMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RelationMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RevenueMapper.xml 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RoleMapper.xml 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemBulletinMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemBulletinUserMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemConfigMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemMessageMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/UserMapper.xml 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/UserToCouponMapper.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/WeatherCityMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/YouTuiDriverMapper.xml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/YouTuiMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/factory/UserFactory.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/AccountChangeDetail.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Agent.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/AppUser.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/BranchOffice.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/CancelOrder.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/CashWithdrawal.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Commercial.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/CommercialUserEject.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Coupon.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Dept.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Dict.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Driver.java 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/DriverBank.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/DriverWork.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Edition.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Expense.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Html.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Img.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/JoiningRequirements.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/LoginLog.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/MainContent.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Menu.java 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Notice.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/OperationLog.java 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Order.java 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/OrderRefusal.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/OrderTransfer.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/RechargeRecord.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Region.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Relation.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Revenue.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Role.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemBulletin.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemBulletinUser.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemConfig.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemMessage.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/User.java 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/UserToCoupon.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/WeatherCity.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/YouTui.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/YouTuiDriver.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IAccountChangeDetailService.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IAgentService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IAppUserService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IBranchOfficeService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICancelOrderService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICashWithdrawalService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICommercialService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICommercialUserEjectService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICouponService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDeptService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDictService.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverBankService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverService.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverWorkService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IEditionService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IHtmlService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IImgService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IJoiningRequirementsService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ILoginLogService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IMainContentService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IMenuService.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/INoticeService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOperationLogService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderPositionService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderRefusalService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderService.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderTransferService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRechargeRecordService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRelationService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRevenueService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRoleService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemBulletinService.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemBulletinUserService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemConfigService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemMessageService.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IUserService.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IUserToCouponService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IWeatherCityService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IYouTuiDriverService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IYouTuiService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/AccountChangeDetailServiceImpl.java 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/AgentServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/AppUserServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/BranchOfficeServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CancelOrderServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CommercialServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CommercialUserEjectServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CouponServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DeptServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DictServiceImpl.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverBankServiceImpl.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java 905 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverWorkServiceImpl.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/EditionServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/HtmlServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/ImgServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/JoiningRequirementsServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/LoginLogServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/MainContentServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/MenuServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/NoticeServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OperationLogServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderRefusalServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java 1637 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderTransferServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RechargeRecordServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RelationServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RevenueServiceImpl.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RoleServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemBulletinServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemBulletinUserServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemConfigServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemMessageServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/UserServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/UserToCouponServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/WeatherCityServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/YouTuiDriverServiceImpl.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/YouTuiServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/ManagerUser.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/ReqAddManager.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/ReqEditManager.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/UserDto.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ALiApiUtil.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ALiSendSms.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ChinaMobileUtil.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/DateUtil.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GaoDe/MapConfig.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GaoDe/MapUtil.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GaoDe/model/District.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GeodesyUtil.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MD5AndKL.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/config/ChannelConfig.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/BindAccount.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/InterfaceRequest.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/InterfaceResponse.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/Register.java 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/UnbindAccount.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/Base64.java 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/CacheUtils.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/RSAEncryptGeneration.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/RSASignature.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/StringUtil.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/TrhRequest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java 875 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PushUtil.java 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/RedisUtil.java 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ResultUtil.java 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/TaskUtil.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/UUIDUtil.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/WeChatUtil.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/httpClinet/HttpClientUtil.java 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/httpClinet/HttpResult.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/huawei/OBSUtil.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/huawei/SMSUtil.java 241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/OCRUtil.java 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/Realtime.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/WeatherCityInfo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/WeatherUtil.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/MongoUtils.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/model/GeoJson.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/model/Location.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/model/LocationQuery.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/RongYunUtil.java 306 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/model/CloudRecordingCallback.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/model/Config.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/model/Output.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/AddOrderWarpper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/BalanceDetailWarpper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/BaseWarpper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommercialWarpper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommissionDetailListWarpper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommissionDetailWarpper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommissionListWarpper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DeptWarpper.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DictWarpper.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverInfo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverInfoWarpper.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverOrderListWarpper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverPositionWarpper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverRegisterWarpper.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverYouTuiListWarpper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverYouTuiWarpper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/EditionWarpper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/HallOrderList.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/IntegralIncomeAndExpensesWarpper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/InviteListWarpper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/LogWarpper.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/MenuWarpper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/MyAchievementWarpper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/NoticeWrapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OpenCityWarpper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderEndAddressWarpper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderInfoWarpper.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderPositionWarpper.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderPriceWarpper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PerformanceRankingWarpper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PerformanceSummaryWarpper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/ProcessOperationsWarpper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PromotionWarpper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PushOrderInfoWarpper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/ResponseWarpper.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/RoleWarpper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/SystemBulletinInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/SystemBulletinListWarpper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/SystemMessageWarpper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/TokenWarpper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/UserWarpper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/resources/META-INF/spring-devtools.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/resources/application.yml 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/resources/ehcache.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/resources/logback-spring.xml 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/resources/redis.properties 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/404.html 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/blackboard.html 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/code/code.html 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/_container.html 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/_right.html 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/_tab.html 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/_theme.html 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/NameCon.tag 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/SelectCon.tag 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/TimeCon.tag 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/avatar.tag 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/button.tag 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/input.tag 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/select.tag 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/table.tag 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/tag_tips 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/index.html 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/login.html 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/code/code.html 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/dept/dept.html 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/dept/dept_add.html 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/dept/dept_edit.html 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/dict/dict.html 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/dict/dict_add.html 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/dict/dict_edit.html 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/log/log.html 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/log/login_log.html 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/menu/menu.html 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/menu/menu_add.html 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/menu/menu_edit.html 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/notice/notice.html 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/notice/notice_add.html 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/notice/notice_edit.html 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role.html 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role_add.html 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role_assign.html 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role_edit.html 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user.html 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_add.html 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_chpwd.html 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_edit.html 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_roleassign.html 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_view.html 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/_fstyle.css 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/bootstrap-rtl.css 1468 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/bootstrap.min.css 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/font-awesome.css 2026 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/font-awesome.min.css 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/login.css 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/patterns/header-profile-skin-1.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/patterns/header-profile-skin-3.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/patterns/header-profile.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/patterns/shattered.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/bootstrap-table/bootstrap-table.min.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/bootstrap-treetable/bootstrap-treetable.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/chosen/chosen-sprite.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/chosen/chosen-sprite@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/chosen/chosen.css 423 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/iCheck/custom.css 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/iCheck/green.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/iCheck/green@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/images/sprite-skin-flat.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/validate/bootstrapValidator.min.css 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/webuploader/webuploader.css 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/demo.css 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/1_close.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/1_open.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/2.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/3.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/4.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/5.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/6.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/7.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/8.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/9.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/line_conn.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/loading.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/zTreeStandard.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/zTreeStandard.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/plugins/ztree/zTreeStyle.css 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/css/style.css 7897 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/FontAwesome.otf 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.eot 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.svg 640 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.eot 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.svg 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff2 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/img/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/img/boy.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/img/girl.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/img/icons.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/img/loading-upload.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/img/locked.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/img/user.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/bootstrap.min.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/DateUtils.js 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/Feng.js 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/ajax-object.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/bootstrap-table-object.js 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/select-list-object.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/tree-table-object.js 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/web-upload-object.js 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/common/ztree-object.js 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/contabs.js 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/content.js 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/hplus.js 294 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/jquery.min.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/jquery.min.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/bootstrap-table.min.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-treetable/bootstrap-treetable.js 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/chosen/chosen.jquery.js 1211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/iCheck/icheck.min.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/laydate/laydate.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.eot 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.svg 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/laydate.css 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/layer.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/mobile/layer.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/mobile/need/layer.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/icon-ext.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/layer.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/loading-0.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/loading-1.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/loading-2.gif 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/metisMenu/jquery.metisMenu.js 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/pace/pace.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/slimscroll/jquery.slimscroll.min.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/validate/additional-methods.min.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/validate/bootstrapValidator.min.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/validate/zh_CN.js 370 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/wangEditor/wangEditor.js 3967 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/Uploader.swf 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.css 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.custom.js 6502 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.custom.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.fis.js 8083 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.flashonly.js 4622 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.flashonly.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.html5only.js 6030 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.html5only.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.js 8106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.min.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.noimage.js 5026 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.noimage.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.nolog.js 8012 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.nolog.min.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.withoutimage.js 4993 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.withoutimage.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/js/plugins/ztree/jquery.ztree.all.min.js 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/code/gen.js 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/flowable/expense/expense.js 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/flowable/expense/expense_info.js 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/flowable/process/process.js 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/flowable/process/process_info.js 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/code/code.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/dept/dept.js 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/dept/dept_info.js 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/dict/dict.js 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/dict/dict_info.js 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/log/log.js 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/log/login_log.js 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/menu/menu.js 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/menu/menu_info.js 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/notice/notice.js 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/notice/notice_info.js 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/role/role.js 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/role/role_info.js 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/user/user.js 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/webapp/static/modular/system/user/user_info.js 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/test/java/com/agentdriving/driver/GunsApplicationTest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/pom.xml 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/CoreFlag.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/aop/BaseControllerExceptionHandler.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/base/controller/BaseController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/base/controller/GlobalController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/base/controller/GunsErrorView.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/base/tips/ErrorTip.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/base/tips/SuccessTip.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/base/tips/Tip.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/base/warpper/BaseControllerWarpper.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/BaseCacheFactory.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/CacheKit.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/EhcacheFactory.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/ICache.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/ILoader.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultFastjsonConfig.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultMultiConfig.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultProperties.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultWebConfig.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/config/properties/DruidProperties.java 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/config/properties/MutiDataSourceProperties.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/constant/IsMenu.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/datascope/DataScope.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/datascope/DataScopeInterceptor.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/db/Db.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/exception/GunsException.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/exception/GunsExceptionEnum.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/exception/ServiceExceptionEnum.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/DataSourceContextHolder.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/DynamicDataSource.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/annotion/DataSource.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/aop/MultiSourceExAop.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/node/MenuNode.java 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/node/ZTreeNode.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/page/PageBT.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/page/PageInfoBT.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/ImgQrTool.java 294 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/MatrixToImageConfig.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/MatrixToImageWriter.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/QrImage.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/BasicType.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/BeanKit.java 508 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/ClassKit.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/CollectionKit.java 801 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/DateTime.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/DateTimeKit.java 665 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/HexKit.java 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/HttpKit.java 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/ObjectKit.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/PageKit.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/StrKit.java 1370 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/WafKit.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/WafRequestWrapper.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/support/exception/ToolBoxException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/Convert.java 1061 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/DateUtil.java 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/FileUtil.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/HttpSessionHolder.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/IdGenerator.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/MD5Util.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/NumUtil.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/PingYinUtil.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/RenderUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/ResKit.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/SimpleContrast.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/SpringContextHolder.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/SqlUtil.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/util/ToolUtil.java 582 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/xss/XssFilter.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/java/com/agentdriving/driver/core/xss/XssHttpServletRequestWrapper.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/resources/META-INF/spring.factories 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-core/src/main/resources/default-config.properties 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/pom.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/GunsCodeGenerator.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/config/AbstractGeneratorConfig.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/config/GunsGeneratorConfig.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/config/WebGeneratorConfig.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/model/GenQo.java 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/SimpleTemplateEngine.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/base/AbstractTemplateEngine.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/base/GunsTemplateEngine.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/ContextConfig.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/ControllerConfig.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/DaoConfig.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/Menu.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/PageConfig.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/ServiceConfig.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/SqlConfig.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/resources/gunsTemplate/advanced/Controller.java.btl 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/resources/gunsTemplate/advanced/menu_sql.sql.btl 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/resources/gunsTemplate/advanced/page.html.btl 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/resources/gunsTemplate/advanced/page.js.btl 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/resources/gunsTemplate/advanced/page_add.html.btl 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/resources/gunsTemplate/advanced/page_edit.html.btl 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-generator/src/main/resources/gunsTemplate/advanced/page_info.js.btl 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/pom.xml 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/pom.xml
New file
@@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.agentdriving</groupId>
        <artifactId>guns-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>guns-admin</artifactId>
    <name>guns-admin</name>
    <description>guns 的spring boot版本</description>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--整合hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>com.agentdriving</groupId>
            <artifactId>guns-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.agentdriving</groupId>
            <artifactId>guns-generator</artifactId>
        </dependency>
        <!--spring boot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.11.3</version>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
            <!--<scope>provided</scope>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>javax.servlet</groupId>-->
            <!--<artifactId>javax.servlet-api</artifactId>-->
            <!--<version>3.1.0</version>-->
            <!--<scope>provided</scope>-->
        <!--</dependency>-->
        <!--shiro依赖-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
        </dependency>
        <!-- obs对象存储 -->
        <dependency>
            <groupId>com.huaweicloud</groupId>
            <artifactId>esdk-obs-java-bundle</artifactId>
            <version>[3.21.11,)</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.3</version>
        </dependency>
        <!-- 计算两坐标间的直线距离 -->
        <dependency>
            <groupId>org.gavaghan</groupId>
            <artifactId>geodesy</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <!--微信支付-->
        <dependency>
            <groupId>com.github.wechatpay-apiv3</groupId>
            <artifactId>wechatpay-java</artifactId>
            <version>0.2.7</version>
        </dependency>
        <dependency>
            <groupId>com.github.wechatpay-apiv3</groupId>
            <artifactId>wechatpay-java-shangmi</artifactId>
            <version>0.2.1</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.7</version>
        </dependency>
    </dependencies>
    <build>
        <!--打包jar包方式-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork><!-- 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
                </configuration>
            </plugin>
        </plugins>
        <!--打包war包引入本地jar的打包方式-->
        <!--<plugins>-->
            <!--<plugin>-->
                <!--<groupId>org.apache.maven.plugins</groupId>-->
                <!--<artifactId>maven-war-plugin</artifactId>-->
                <!--<configuration>-->
                    <!--&lt;!&ndash; 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 &ndash;&gt;-->
                    <!--<failOnMissingWebXml>false</failOnMissingWebXml>-->
                    <!--&lt;!&ndash;打包后的项目名&ndash;&gt;-->
                    <!--&lt;!&ndash;<warName>example</warName>&ndash;&gt;-->
                    <!--<webResources>-->
                        <!--<resource>-->
                            <!--&lt;!&ndash;把本地lib里面的jar复制到lib&ndash;&gt;-->
                            <!--<directory>${project.basedir}/lib</directory>-->
                            <!--<targetPath>WEB-INF/lib/</targetPath>-->
                            <!--<includes>-->
                                <!--<include>**/*.jar</include>-->
                            <!--</includes>-->
                        <!--</resource>-->
                    <!--</webResources>-->
                <!--</configuration>-->
            <!--</plugin>-->
        <!--</plugins>-->
        <resources>
            <resource>
                <directory>lib</directory>
                <targetPath>/BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/webapp</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
driver/guns-admin/src/main/java/com/agentdriving/driver/GunsApplication.java
New file
@@ -0,0 +1,81 @@
package com.agentdriving.driver;
import org.apache.http.client.HttpClient;
import org.apache.http.config.SocketConfig;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
/**
 * SpringBoot方式启动类
 *
 * @author stylefeng
 * @Date 2017/5/21 12:06
 */
@EnableEurekaClient//注册为服务提供者
@SpringBootApplication
@EnableScheduling//开启定时任务
@EnableTransactionManagement//启动事务功能
@MapperScan("com.agentdriving.driver.modular.system.dao")
public class GunsApplication {
    private final static Logger logger = LoggerFactory.getLogger(GunsApplication.class);
    public static void main(String[] args) {
        SpringApplication.run(GunsApplication.class, args);
        logger.info("GunsApplication is success!");
    }
    /**
     * 向Spring容器中定义RestTemplate对象
     * @return
     */
    @Bean //SpringCloud内部服务质检使用服务名调用
    @LoadBalanced
    public RestTemplate internalRestTemplate() {
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setDefaultSocketConfig(SocketConfig.custom().setTcpNoDelay(true).build());
        connectionManager.setDefaultMaxPerRoute(100);//最大并发连接
        connectionManager.setMaxTotal(200); // 总的最大连接数
        HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager).build();
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        httpRequestFactory.setConnectionRequestTimeout(30 * 1000);
        httpRequestFactory.setConnectTimeout(30 * 3000);
        httpRequestFactory.setReadTimeout(30 * 3000);
        RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        return restTemplate;
    }
    @Bean //通过ip地址调用
    public RestTemplate restTemplate() {
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setDefaultSocketConfig(SocketConfig.custom().setTcpNoDelay(true).build());
        connectionManager.setDefaultMaxPerRoute(100);//最大并发连接
        connectionManager.setMaxTotal(200); // 总的最大连接数
        HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager).build();
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        httpRequestFactory.setConnectionRequestTimeout(30 * 1000);
        httpRequestFactory.setConnectTimeout(30 * 3000);
        httpRequestFactory.setReadTimeout(30 * 3000);
        RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        return restTemplate;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/GunsServletInitializer.java
New file
@@ -0,0 +1,18 @@
package com.agentdriving.driver;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
 * Guns Web程序启动类
 *
 * @author fengshuonan
 * @date 2017-05-21 9:43
 */
public class GunsServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(GunsApplication.class);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/EhCacheConfig.java
New file
@@ -0,0 +1,39 @@
package com.agentdriving.driver.config;
import net.sf.ehcache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
/**
 * ehcache配置
 *
 * @author fengshuonan
 * @date 2017-05-20 23:11
 */
@Configuration
@EnableCaching
public class EhCacheConfig {
    /**
     * EhCache的配置
     */
    @Bean
    public EhCacheCacheManager cacheManager(CacheManager cacheManager) {
        return new EhCacheCacheManager(cacheManager);
    }
    /**
     * EhCache的配置
     */
    @Bean
    public EhCacheManagerFactoryBean ehcache() {
        EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
        ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
        ehCacheManagerFactoryBean.setShared(true);//共享缓存,避免tomcat启动报错
        return ehCacheManagerFactoryBean;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/RedisConfig.java
New file
@@ -0,0 +1,46 @@
package com.agentdriving.driver.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@PropertySource("classpath:redis.properties")
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.jedis.pool.max-wait}")
    private long maxWaitMillis;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.block-when-exhausted}")
    private boolean  blockWhenExhausted;
    @Bean
    public JedisPool redisPoolFactory()  throws Exception{
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        // 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
        jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted);
        // 是否启用pool的jmx管理功能, 默认true
        jedisPoolConfig.setJmxEnabled(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
        return jedisPool;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/SpringSessionConfig.java
New file
@@ -0,0 +1,15 @@
package com.agentdriving.driver.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
/**
 * spring session配置
 *
 * @author fengshuonan
 * @date 2017-07-13 21:05
 */
//@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)  //session过期时间  如果部署多机环境,需要打开注释
@ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
public class SpringSessionConfig {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/SwaggerConfig.java
New file
@@ -0,0 +1,48 @@
package com.agentdriving.driver.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * swagger配置类
 *
 * @author fengshuonan
 * @date 2017年6月1日19:42:59
 */
@Configuration
@EnableSwagger2
@ConditionalOnProperty(prefix = "guns", name = "swagger-open", havingValue = "true")
public class SwaggerConfig{
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))                         //这里采用包含注解的方式来确定要显示的接口
                //.apis(RequestHandlerSelectors.basePackage("com.agentdriving.driver.modular.system.controller"))    //这里采用包扫描的方式来确定要显示的接口
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("芳华代驾")
                .description("所有接口前需要加 /driver 前缀,例如:/driver/base/agreement/queryByType <br>" +
                        "所有以 /api/*** 路径的接口需要上传签名参数sign")
//                .termsOfServiceUrl("http://git.oschina.net/naan1993/guns")
                .contact("stylefeng")
                .version("1.0")
                .build();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/datasource/MultiDataSourceConfig.java
New file
@@ -0,0 +1,125 @@
package com.agentdriving.driver.config.datasource;
import com.agentdriving.driver.core.config.properties.DruidProperties;
import com.agentdriving.driver.core.config.properties.MutiDataSourceProperties;
import com.agentdriving.driver.core.datascope.DataScopeInterceptor;
import com.agentdriving.driver.core.mutidatasource.DynamicDataSource;
import com.agentdriving.driver.core.mutidatasource.aop.MultiSourceExAop;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.sql.SQLException;
import java.util.HashMap;
/**
 * 多数据源配置<br/>
 * <p>
 * 注:由于引入多数据源,所以让spring事务的aop要在多数据源切换aop的后面
 *
 * @author stylefeng
 * @Date 2017/5/20 21:58
 */
@Configuration
@ConditionalOnProperty(prefix = "guns.muti-datasource", name = "open", havingValue = "true")
@EnableTransactionManagement(order = 2)
@MapperScan(basePackages = {"com.agentdriving.driver.modular.*.dao","com.agentdriving.driver.multi.mapper"})
public class MultiDataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "guns.muti-datasource")
    public MutiDataSourceProperties mutiDataSourceProperties() {
        return new MutiDataSourceProperties();
    }
    @Bean
    public MultiSourceExAop multiSourceExAop() {
        return new MultiSourceExAop();
    }
    /**
     * guns的数据源
     */
    private DruidDataSource dataSource(DruidProperties druidProperties) {
        DruidDataSource dataSource = new DruidDataSource();
        druidProperties.config(dataSource);
        return dataSource;
    }
    /**
     * 多数据源,第二个数据源
     */
    private DruidDataSource bizDataSource(DruidProperties druidProperties, MutiDataSourceProperties mutiDataSourceProperties) {
        DruidDataSource dataSource = new DruidDataSource();
        druidProperties.config(dataSource);
        mutiDataSourceProperties.config(dataSource);
        return dataSource;
    }
    /**
     * 多数据源连接池配置
     */
    @Bean
    public DynamicDataSource mutiDataSource(DruidProperties druidProperties, MutiDataSourceProperties mutiDataSourceProperties) {
        DruidDataSource dataSourceGuns = dataSource(druidProperties);
        DruidDataSource bizDataSource = bizDataSource(druidProperties, mutiDataSourceProperties);
        try {
            dataSourceGuns.init();
            bizDataSource.init();
        } catch (SQLException sql) {
            sql.printStackTrace();
        }
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        HashMap<Object, Object> hashMap = new HashMap<>();
        hashMap.put(mutiDataSourceProperties.getDataSourceNames()[0], dataSourceGuns);
        hashMap.put(mutiDataSourceProperties.getDataSourceNames()[1], bizDataSource);
        dynamicDataSource.setTargetDataSources(hashMap);
        dynamicDataSource.setDefaultTargetDataSource(dataSourceGuns);
        return dynamicDataSource;
    }
    /**
     * mybatis-plus分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    /**
     * 数据范围mybatis插件
     */
    @Bean
    public DataScopeInterceptor dataScopeInterceptor() {
        return new DataScopeInterceptor();
    }
    /**
     * 乐观锁mybatis插件
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
    /**
     * 事务配置
     *
     * @author stylefeng
     * @Date 2018/6/27 23:11
     */
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(DynamicDataSource mutiDataSource) {
        return new DataSourceTransactionManager(mutiDataSource);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/datasource/SingleDataSourceConfig.java
New file
@@ -0,0 +1,61 @@
package com.agentdriving.driver.config.datasource;
import com.agentdriving.driver.core.config.properties.DruidProperties;
import com.agentdriving.driver.core.datascope.DataScopeInterceptor;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
 * 多数据源配置
 *
 * @author stylefeng
 * @Date 2017/5/20 21:58
 */
@Configuration
@ConditionalOnProperty(prefix = "guns.muti-datasource", name = "open", havingValue = "false", matchIfMissing = true)
@EnableTransactionManagement
@MapperScan(basePackages = {"com.agentdriving.driver.modular.*.dao"})
public class SingleDataSourceConfig {
    /**
     * 单数据源连接池配置
     */
    @Bean
    public DruidDataSource dataSource(DruidProperties druidProperties) {
        DruidDataSource dataSource = new DruidDataSource();
        druidProperties.config(dataSource);
        return dataSource;
    }
    /**
     * mybatis-plus分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    /**
     * 数据范围mybatis插件
     */
    @Bean
    public DataScopeInterceptor dataScopeInterceptor() {
        return new DataScopeInterceptor();
    }
    /**
     * 乐观锁mybatis插件
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/properties/BeetlProperties.java
New file
@@ -0,0 +1,103 @@
package com.agentdriving.driver.config.properties;
import com.agentdriving.driver.core.util.ToolUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
/**
 * beetl配置(如果需要配置别的配置可参照这个形式自己添加)
 *
 * @author fengshuonan
 * @date 2017-05-24 20:37
 */
@Configuration
@ConfigurationProperties(prefix = BeetlProperties.BEETLCONF_PREFIX)
public class BeetlProperties {
    public static final String BEETLCONF_PREFIX = "beetl";
    private String delimiterStatementStart;
    private String delimiterStatementEnd;
    private String resourceTagroot;
    private String resourceTagsuffix;
    private String resourceAutoCheck;
    @Value("${spring.mvc.view.prefix}")
    private String prefix;
    public Properties getProperties(){
        Properties properties = new Properties();
        if(ToolUtil.isNotEmpty(delimiterStatementStart)){
            if(delimiterStatementStart.startsWith("\\")){
                delimiterStatementStart = delimiterStatementStart.substring(1);
            }
            properties.setProperty("DELIMITER_STATEMENT_START",delimiterStatementStart);
        }
        if(ToolUtil.isNotEmpty(delimiterStatementEnd)){
            properties.setProperty("DELIMITER_STATEMENT_END",delimiterStatementEnd);
        }else{
            properties.setProperty("DELIMITER_STATEMENT_END","null");
        }
        if(ToolUtil.isNotEmpty(resourceTagroot)){
            properties.setProperty("RESOURCE.tagRoot",resourceTagroot);
        }
        if(ToolUtil.isNotEmpty(resourceTagsuffix)){
            properties.setProperty("RESOURCE.tagSuffix",resourceTagsuffix);
        }
        if(ToolUtil.isNotEmpty(resourceAutoCheck)){
            properties.setProperty("RESOURCE.autoCheck",resourceAutoCheck);
        }
        return properties;
    }
    public String getPrefix() {
        return prefix;
    }
    public String getDelimiterStatementStart() {
        return delimiterStatementStart;
    }
    public void setDelimiterStatementStart(String delimiterStatementStart) {
        this.delimiterStatementStart = delimiterStatementStart;
    }
    public String getDelimiterStatementEnd() {
        return delimiterStatementEnd;
    }
    public void setDelimiterStatementEnd(String delimiterStatementEnd) {
        this.delimiterStatementEnd = delimiterStatementEnd;
    }
    public String getResourceTagroot() {
        return resourceTagroot;
    }
    public void setResourceTagroot(String resourceTagroot) {
        this.resourceTagroot = resourceTagroot;
    }
    public String getResourceTagsuffix() {
        return resourceTagsuffix;
    }
    public void setResourceTagsuffix(String resourceTagsuffix) {
        this.resourceTagsuffix = resourceTagsuffix;
    }
    public String getResourceAutoCheck() {
        return resourceAutoCheck;
    }
    public void setResourceAutoCheck(String resourceAutoCheck) {
        this.resourceAutoCheck = resourceAutoCheck;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/properties/GunsProperties.java
New file
@@ -0,0 +1,103 @@
package com.agentdriving.driver.config.properties;
import com.agentdriving.driver.core.util.ToolUtil;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.io.File;
/**
 * guns项目配置
 *
 * @author stylefeng
 * @Date 2017/5/23 22:31
 */
@Component
@ConfigurationProperties(prefix = GunsProperties.PREFIX)
public class GunsProperties {
    public static final String PREFIX = "guns";
    private Boolean kaptchaOpen = false;
    private Boolean swaggerOpen = false;
    private String fileUploadPath;
    private Boolean haveCreatePath = false;
    private Boolean springSessionOpen = false;
    /**
     * session 失效时间(默认为30分钟 单位:秒)
     */
    private Integer sessionInvalidateTime = 30 * 60;
    /**
     * session 验证失效时间(默认为15分钟 单位:秒)
     */
    private Integer sessionValidationInterval = 15 * 60;
    public String getFileUploadPath() {
        //如果没有写文件上传路径,保存到临时目录
        if (ToolUtil.isEmpty(fileUploadPath)) {
            return ToolUtil.getTempPath();
        } else {
            //判断有没有结尾符,没有得加上
            if (!fileUploadPath.endsWith(File.separator)) {
                fileUploadPath = fileUploadPath + File.separator;
            }
            //判断目录存不存在,不存在得加上
            if (!haveCreatePath) {
                File file = new File(fileUploadPath);
                file.mkdirs();
                haveCreatePath = true;
            }
            return fileUploadPath;
        }
    }
    public void setFileUploadPath(String fileUploadPath) {
        this.fileUploadPath = fileUploadPath;
    }
    public Boolean getKaptchaOpen() {
        return kaptchaOpen;
    }
    public void setKaptchaOpen(Boolean kaptchaOpen) {
        this.kaptchaOpen = kaptchaOpen;
    }
    public Boolean getSwaggerOpen() {
        return swaggerOpen;
    }
    public void setSwaggerOpen(Boolean swaggerOpen) {
        this.swaggerOpen = swaggerOpen;
    }
    public Boolean getSpringSessionOpen() {
        return springSessionOpen;
    }
    public void setSpringSessionOpen(Boolean springSessionOpen) {
        this.springSessionOpen = springSessionOpen;
    }
    public Integer getSessionInvalidateTime() {
        return sessionInvalidateTime;
    }
    public void setSessionInvalidateTime(Integer sessionInvalidateTime) {
        this.sessionInvalidateTime = sessionInvalidateTime;
    }
    public Integer getSessionValidationInterval() {
        return sessionValidationInterval;
    }
    public void setSessionValidationInterval(Integer sessionValidationInterval) {
        this.sessionValidationInterval = sessionValidationInterval;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/web/BeetlConfig.java
New file
@@ -0,0 +1,45 @@
package com.agentdriving.driver.config.web;
import com.agentdriving.driver.config.properties.BeetlProperties;
import com.agentdriving.driver.core.beetl.BeetlConfiguration;
import org.beetl.core.resource.ClasspathResourceLoader;
import org.beetl.ext.spring.BeetlSpringViewResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * web 配置类
 *
 * @author fengshuonan
 * @date 2016年11月12日 下午5:03:32
 */
@Configuration
public class BeetlConfig {
    @Autowired
    BeetlProperties beetlProperties;
    /**
     * beetl的配置
     */
    @Bean(initMethod = "init")
    public BeetlConfiguration beetlConfiguration() {
        BeetlConfiguration beetlConfiguration = new BeetlConfiguration();
        beetlConfiguration.setResourceLoader(new ClasspathResourceLoader(BeetlConfig.class.getClassLoader(), beetlProperties.getPrefix()));
        beetlConfiguration.setConfigProperties(beetlProperties.getProperties());
        return beetlConfiguration;
    }
    /**
     * beetl的视图解析器
     */
    @Bean
    public BeetlSpringViewResolver beetlViewResolver() {
        BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver();
        beetlSpringViewResolver.setConfig(beetlConfiguration());
        beetlSpringViewResolver.setContentType("text/html;charset=UTF-8");
        beetlSpringViewResolver.setOrder(0);
        return beetlSpringViewResolver;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/web/ShiroConfig.java
New file
@@ -0,0 +1,216 @@
package com.agentdriving.driver.config.web;
import com.agentdriving.driver.core.shiro.ShiroDbRealm;
import com.agentdriving.driver.core.intercept.GunsUserFilter;
import com.agentdriving.driver.config.properties.GunsProperties;
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;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.Cookie;
import org.apache.shiro.web.servlet.ShiroHttpSession;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.apache.shiro.web.session.mgt.ServletContainerSessionManager;
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.Filter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
 * shiro权限管理的配置
 *
 * @author fengshuonan
 * @date 2016年11月14日 下午3:03:44
 */
@Configuration
public class ShiroConfig {
    /**
     * 安全管理器
     */
    @Bean
    public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessionManager) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(this.shiroDbRealm());
        securityManager.setCacheManager(cacheShiroManager);
        securityManager.setRememberMeManager(rememberMeManager);
        securityManager.setSessionManager(sessionManager);
        return securityManager;
    }
    /**
     * spring session管理器(多机环境)
     */
    @Bean
    @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
    public ServletContainerSessionManager servletContainerSessionManager() {
        return new ServletContainerSessionManager();
    }
    /**
     * session管理器(单机环境)
     */
    @Bean
    @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "false")
    public DefaultWebSessionManager defaultWebSessionManager(CacheManager cacheShiroManager, GunsProperties gunsProperties) {
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        sessionManager.setCacheManager(cacheShiroManager);
        sessionManager.setSessionValidationInterval(gunsProperties.getSessionValidationInterval() * 1000);
        sessionManager.setGlobalSessionTimeout(gunsProperties.getSessionInvalidateTime() * 1000);
        sessionManager.setDeleteInvalidSessions(true);
        sessionManager.setSessionValidationSchedulerEnabled(true);
        Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
        cookie.setName("shiroCookie");
        cookie.setHttpOnly(true);
        sessionManager.setSessionIdCookie(cookie);
        return sessionManager;
    }
    /**
     * 缓存管理器 使用Ehcache实现
     */
    @Bean
    public CacheManager getCacheShiroManager(EhCacheManagerFactoryBean ehcache) {
        EhCacheManager ehCacheManager = new EhCacheManager();
        ehCacheManager.setCacheManager(ehcache.getObject());
        return ehCacheManager;
    }
    /**
     * 项目自定义的Realm
     */
    @Bean
    public ShiroDbRealm shiroDbRealm() {
        return new ShiroDbRealm();
    }
    /**
     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
     */
    @Bean
    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
        CookieRememberMeManager manager = new CookieRememberMeManager();
        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
        manager.setCookie(rememberMeCookie);
        return manager;
    }
    /**
     * 记住密码Cookie
     */
    @Bean
    public SimpleCookie rememberMeCookie() {
        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
        simpleCookie.setHttpOnly(true);
        simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天
        return simpleCookie;
    }
    /**
     * Shiro的过滤器链
     */
    @Bean
    public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
        shiroFilter.setSecurityManager(securityManager);
        /**
         * 默认的登陆访问url
         */
        shiroFilter.setLoginUrl("/login");
        /**
         * 登陆成功后跳转的url
         */
        shiroFilter.setSuccessUrl("/");
        /**
         * 没有权限跳转的url
         */
        shiroFilter.setUnauthorizedUrl("/global/error");
        /**
         * 覆盖默认的user拦截器(默认拦截器解决不了ajax请求 session超时的问题,若有更好的办法请及时反馈作者)
         */
        HashMap<String, Filter> myFilters = new HashMap<>();
        myFilters.put("user", new GunsUserFilter());
        shiroFilter.setFilters(myFilters);
        /**
         * 配置shiro拦截器链
         *
         * anon  不需要认证
         * authc 需要认证
         * user  验证通过或RememberMe登录的都可以
         *
         * 当应用开启了rememberMe时,用户下次访问时可以是一个user,但不会是authc,因为authc是需要重新认证的
         *
         * 顺序从上到下,优先级依次降低
         *
         * api开头的接口,走rest api鉴权,不走shiro鉴权
         *
         */
        Map<String, String> hashMap = new LinkedHashMap<>();
        hashMap.put("/swagger-ui.html", "anon");
        hashMap.put("/swagger-resources/**", "anon");
        hashMap.put("/v2/**", "anon");
        hashMap.put("/webjars/**", "anon");
        hashMap.put("/swagger-resources/configuration/ui/**", "anon");
        hashMap.put("/swagger-resources/configuration/security/**", "anon");
        hashMap.put("/base/**", "anon");
        hashMap.put("/api/**", "anon");//api不走shiro验证
        hashMap.put("/static/**", "anon");
        hashMap.put("/gunsApi/**", "anon");
        hashMap.put("/login", "anon");
        hashMap.put("/global/sessionError", "anon");
        hashMap.put("/kaptcha", "anon");
        hashMap.put("/**", "user");
        shiroFilter.setFilterChainDefinitionMap(hashMap);
        return shiroFilter;
    }
    /**
     * 在方法中 注入 securityManager,进行代理控制
     */
    @Bean
    public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) {
        MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();
        bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager");
        bean.setArguments(new Object[]{securityManager});
        return bean;
    }
    /**
     * Shiro生命周期处理器:
     * 用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调(例如:UserRealm)
     * 在实现了Destroyable接口的Shiro bean销毁时调用 Destroyable接口回调(例如:DefaultSecurityManager)
     */
    @Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }
    /**
     * 启用shrio授权注解拦截方式,AOP式方法级权限检查
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor =
                new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/config/web/WebConfig.java
New file
@@ -0,0 +1,174 @@
package com.agentdriving.driver.config.web;
import com.agentdriving.driver.core.xss.XssFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import com.agentdriving.driver.core.intercept.RestApiInteceptor;
import com.agentdriving.driver.core.listener.ConfigListener;
import com.agentdriving.driver.config.properties.GunsProperties;
import org.springframework.aop.Advisor;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.JdkRegexpMethodPointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.Arrays;
import java.util.Properties;
/**
 * web 配置类
 *
 * @author fengshuonan
 * @date 2016年11月12日 下午5:03:32
 */
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Autowired
    private GunsProperties gunsProperties;
    /**
     * 增加swagger的支持
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (gunsProperties.getSwaggerOpen()) {
            registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    }
    /**
     * 增加对rest api鉴权的spring mvc拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RestApiInteceptor()).addPathPatterns("/api/**");
    }
    /**
     * druidServlet注册
     */
    @Bean
    public ServletRegistrationBean druidServletRegistration() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new StatViewServlet());
        registration.addUrlMappings("/druid/*");
        return registration;
    }
    /**
     * druid监控 配置URI拦截策略
     */
    @Bean
    public FilterRegistrationBean druidStatFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter(
                "exclusions", "/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid,/druid/*");
        //用于session监控页面的用户名显示 需要登录后主动将username注入到session里
        filterRegistrationBean.addInitParameter("principalSessionName", "username");
        return filterRegistrationBean;
    }
    /**
     * druid数据库连接池监控
     */
    @Bean
    public DruidStatInterceptor druidStatInterceptor() {
        return new DruidStatInterceptor();
    }
    @Bean
    public JdkRegexpMethodPointcut druidStatPointcut() {
        JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut();
        String patterns = "com.agentdriving.driver.modular.*.service.*";
        //可以set多个
        druidStatPointcut.setPatterns(patterns);
        return druidStatPointcut;
    }
    /**
     * druid数据库连接池监控
     */
    @Bean
    public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
        BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
        beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
        beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
        return beanTypeAutoProxyCreator;
    }
    /**
     * druid 为druidStatPointcut添加拦截
     *
     * @return
     */
    @Bean
    public Advisor druidStatAdvisor() {
        return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
    }
    /**
     * xssFilter注册
     */
    @Bean
    public FilterRegistrationBean xssFilterRegistration() {
        XssFilter xssFilter = new XssFilter();
        xssFilter.setUrlExclusion(Arrays.asList("/notice/update", "/notice/add"));
        FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
        registration.addUrlPatterns("/*");
        return registration;
    }
    /**
     * RequestContextListener注册
     */
    @Bean
    public ServletListenerRegistrationBean<RequestContextListener> requestContextListenerRegistration() {
        return new ServletListenerRegistrationBean<>(new RequestContextListener());
    }
    /**
     * ConfigListener注册
     */
    @Bean
    public ServletListenerRegistrationBean<ConfigListener> configListenerRegistration() {
        return new ServletListenerRegistrationBean<>(new ConfigListener());
    }
    /**
     * 验证码生成相关
     */
    @Bean
    public DefaultKaptcha kaptcha() {
        Properties properties = new Properties();
        properties.put("kaptcha.border", "no");
        properties.put("kaptcha.border.color", "105,179,90");
        properties.put("kaptcha.textproducer.font.color", "blue");
        properties.put("kaptcha.image.width", "125");
        properties.put("kaptcha.image.height", "45");
        properties.put("kaptcha.textproducer.font.size", "45");
        properties.put("kaptcha.session.key", "code");
        properties.put("kaptcha.textproducer.char.length", "4");
        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/aop/GlobalExceptionHandler.java
New file
@@ -0,0 +1,119 @@
package com.agentdriving.driver.core.aop;
import com.agentdriving.driver.core.base.tips.ErrorTip;
import com.agentdriving.driver.core.common.exception.BizExceptionEnum;
import com.agentdriving.driver.core.common.exception.InvalidKaptchaException;
import com.agentdriving.driver.core.exception.GunsException;
import com.agentdriving.driver.core.log.LogManager;
import com.agentdriving.driver.core.log.factory.LogTaskFactory;
import com.agentdriving.driver.core.shiro.ShiroKit;
import com.agentdriving.driver.core.support.HttpKit;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.CredentialsException;
import org.apache.shiro.authc.DisabledAccountException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import java.lang.reflect.UndeclaredThrowableException;
/**
 * 全局的的异常拦截器(拦截所有的控制器)(带有@RequestMapping注解的方法上都会拦截)
 *
 * @author fengshuonan
 * @date 2016年11月12日 下午3:19:56
 */
//@ControllerAdvice
//@Order(-1)
public class GlobalExceptionHandler {
    private Logger log = LoggerFactory.getLogger(this.getClass());
    /**
     * 拦截业务异常
     */
    @ExceptionHandler(GunsException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public ErrorTip notFount(GunsException e) {
        LogManager.me().executeLog(LogTaskFactory.exceptionLog(ShiroKit.getUser().getId(), e));
        HttpKit.getRequest().setAttribute("tip", e.getMessage());
        log.error("业务异常:", e);
        return new ErrorTip(e.getCode(), e.getMessage());
    }
    /**
     * 用户未登录异常
     */
    @ExceptionHandler(AuthenticationException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public String unAuth(AuthenticationException e) {
        log.error("用户未登陆:", e);
        return "/login.html";
    }
    /**
     * 账号被冻结异常
     */
    @ExceptionHandler(DisabledAccountException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public String accountLocked(DisabledAccountException e, Model model) {
        String username = HttpKit.getRequest().getParameter("username");
        LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号被冻结", HttpKit.getIp()));
        model.addAttribute("tips", "账号被冻结");
        return "/login.html";
    }
    /**
     * 账号密码错误异常
     */
    @ExceptionHandler(CredentialsException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public String credentials(CredentialsException e, Model model) {
        String username = HttpKit.getRequest().getParameter("username");
        LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号密码错误", HttpKit.getIp()));
        model.addAttribute("tips", "账号密码错误");
        return "/login.html";
    }
    /**
     * 验证码错误异常
     */
    @ExceptionHandler(InvalidKaptchaException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String credentials(InvalidKaptchaException e, Model model) {
        String username = HttpKit.getRequest().getParameter("username");
        LogManager.me().executeLog(LogTaskFactory.loginLog(username, "验证码错误", HttpKit.getIp()));
        model.addAttribute("tips", "验证码错误");
        return "/login.html";
    }
    /**
     * 无权访问该资源异常
     */
    @ExceptionHandler(UndeclaredThrowableException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    @ResponseBody
    public ErrorTip credentials(UndeclaredThrowableException e) {
        HttpKit.getRequest().setAttribute("tip", "权限异常");
        log.error("权限异常!", e);
        return new ErrorTip(BizExceptionEnum.NO_PERMITION.getCode(), BizExceptionEnum.NO_PERMITION.getMessage());
    }
    /**
     * 拦截未知的运行时异常
     */
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public ErrorTip notFount(RuntimeException e) {
        LogManager.me().executeLog(LogTaskFactory.exceptionLog(ShiroKit.getUser().getId(), e));
        HttpKit.getRequest().setAttribute("tip", "服务器未知运行时异常");
        log.error("运行时异常:", e);
        return new ErrorTip(BizExceptionEnum.SERVER_ERROR.getCode(), BizExceptionEnum.SERVER_ERROR.getMessage());
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/aop/LogAop.java
New file
@@ -0,0 +1,105 @@
package com.agentdriving.driver.core.aop;
import com.agentdriving.driver.core.common.annotion.BussinessLog;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
import com.agentdriving.driver.core.log.LogManager;
import com.agentdriving.driver.core.log.LogObjectHolder;
import com.agentdriving.driver.core.log.factory.LogTaskFactory;
import com.agentdriving.driver.core.shiro.ShiroKit;
import com.agentdriving.driver.core.shiro.ShiroUser;
import com.agentdriving.driver.core.support.HttpKit;
import com.agentdriving.driver.core.util.Contrast;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Map;
/**
 * 日志记录
 *
 * @author fengshuonan
 * @date 2016年12月6日 下午8:48:30
 */
@Aspect
@Component
public class LogAop {
    private Logger log = LoggerFactory.getLogger(this.getClass());
    @Pointcut(value = "@annotation(com.agentdriving.driver.core.common.annotion.BussinessLog)")
    public void cutService() {
    }
    @Around("cutService()")
    public Object recordSysLog(ProceedingJoinPoint point) throws Throwable {
        //先执行业务
        Object result = point.proceed();
        try {
            handle(point);
        } catch (Exception e) {
            log.error("日志记录出错!", e);
        }
        return result;
    }
    private void handle(ProceedingJoinPoint point) throws Exception {
        //获取拦截的方法名
        Signature sig = point.getSignature();
        MethodSignature msig = null;
        if (!(sig instanceof MethodSignature)) {
            throw new IllegalArgumentException("该注解只能用于方法");
        }
        msig = (MethodSignature) sig;
        Object target = point.getTarget();
        Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes());
        String methodName = currentMethod.getName();
        //如果当前用户未登录,不做日志
        ShiroUser user = ShiroKit.getUser();
        if (null == user) {
            return;
        }
        //获取拦截方法的参数
        String className = point.getTarget().getClass().getName();
        Object[] params = point.getArgs();
        //获取操作名称
        BussinessLog annotation = currentMethod.getAnnotation(BussinessLog.class);
        String bussinessName = annotation.value();
        String key = annotation.key();
        Class dictClass = annotation.dict();
        StringBuilder sb = new StringBuilder();
        for (Object param : params) {
            sb.append(param);
            sb.append(" & ");
        }
        //如果涉及到修改,比对变化
        String msg;
        if (bussinessName.indexOf("修改") != -1 || bussinessName.indexOf("编辑") != -1) {
            Object obj1 = LogObjectHolder.me().get();
            Map<String, String> obj2 = HttpKit.getRequestParameters();
            msg = Contrast.contrastObj(dictClass, key, obj1, obj2);
        } else {
            Map<String, String> parameters = HttpKit.getRequestParameters();
            AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance();
            msg = Contrast.parseMutiKey(dictMap,key,parameters);
        }
        LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg));
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/aop/PermissionAop.java
New file
@@ -0,0 +1,70 @@
/**
 * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.agentdriving.driver.core.aop;
import com.agentdriving.driver.core.common.annotion.Permission;
import com.agentdriving.driver.core.shiro.check.PermissionCheckManager;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.naming.NoPermissionException;
import java.lang.reflect.Method;
/**
 * AOP 权限自定义检查
 */
@Aspect
@Component
@Order(200)
public class PermissionAop {
    @Pointcut(value = "@annotation(com.agentdriving.driver.core.common.annotion.Permission)")
    private void cutPermission() {
    }
    @Around("cutPermission()")
    public Object doPermission(ProceedingJoinPoint point) throws Throwable {
        MethodSignature ms = (MethodSignature) point.getSignature();
        Method method = ms.getMethod();
        Permission permission = method.getAnnotation(Permission.class);
        Object[] permissions = permission.value();
        if (permissions == null || permissions.length == 0) {
            //检查全体角色
            boolean result = PermissionCheckManager.checkAll();
            if (result) {
                return point.proceed();
            } else {
                throw new NoPermissionException();
            }
        } else {
            //检查指定角色
            boolean result = PermissionCheckManager.check(permissions);
            if (result) {
                return point.proceed();
            } else {
                throw new NoPermissionException();
            }
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/beetl/BeetlConfiguration.java
New file
@@ -0,0 +1,71 @@
package com.agentdriving.driver.core.beetl;
import com.agentdriving.driver.core.tag.DictSelectorTag;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.core.util.KaptchaUtil;
import org.beetl.core.Context;
import org.beetl.core.Function;
import org.beetl.core.Tag;
import org.beetl.core.TagFactory;
import org.beetl.ext.spring.BeetlGroupUtilConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import java.io.UnsupportedEncodingException;
/**
 * beetl拓展配置,绑定一些工具类,方便在模板中直接调用
 *
 * @author stylefeng
 * @Date 2018/2/22 21:03
 */
public class BeetlConfiguration extends BeetlGroupUtilConfiguration {
    @Autowired
    Environment env;
    @Autowired
    ApplicationContext applicationContext;
    @Autowired
    DictSelectorTag dictSelectorTag;
    @Override
    public void initOther() {
        groupTemplate.registerFunctionPackage("shiro", new ShiroExt());
        groupTemplate.registerFunctionPackage("tool", new ToolUtil());
        groupTemplate.registerFunctionPackage("kaptcha", new KaptchaUtil());
        groupTemplate.registerTagFactory("dictSelector", new TagFactory() {
            @Override
            public Tag createTag() {
                return dictSelectorTag;
            }
        });
        groupTemplate.registerFunction("env", new Function() {
            @Override
            public String call(Object[] paras, Context ctx) {
                String key = (String)paras[0];
                String value =  env.getProperty(key);
                if(value!=null) {
                    return getStr(value);
                }
                if(paras.length==2) {
                    return (String)paras[1];
                }
                return null;
            }
            protected String getStr(String str) {
                try {
                    return new String(str.getBytes("iso8859-1"),"UTF-8");
                } catch (UnsupportedEncodingException e) {
                    throw new RuntimeException(e);
                }
            }
        });
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/beetl/ShiroExt.java
New file
@@ -0,0 +1,185 @@
/**
 * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.agentdriving.driver.core.beetl;
import com.agentdriving.driver.core.shiro.ShiroUser;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.beetl.core.GroupTemplate;
public class ShiroExt {
    private static final String NAMES_DELIMETER = ",";
    /**
     * 获取当前 Subject
     *
     * @return Subject
     */
    protected static Subject getSubject() {
        return SecurityUtils.getSubject();
    }
    /**
     * 获取封装的 ShiroUser
     *
     * @return ShiroUser
     */
    public ShiroUser getUser() {
        if (isGuest()) {
            return null;
        } else {
            return (ShiroUser) getSubject().getPrincipals().getPrimaryPrincipal();
        }
    }
    /**
     * 验证当前用户是否属于该角色?,使用时与lacksRole 搭配使用
     *
     * @param roleName 角色名
     * @return 属于该角色:true,否则false
     */
    public boolean hasRole(String roleName) {
        return getSubject() != null && roleName != null
                && roleName.length() > 0 && getSubject().hasRole(roleName);
    }
    /**
     * 与hasRole标签逻辑相反,当用户不属于该角色时验证通过。
     *
     * @param roleName 角色名
     * @return 不属于该角色:true,否则false
     */
    public boolean lacksRole(String roleName) {
        return !hasRole(roleName);
    }
    /**
     * 验证当前用户是否属于以下任意一个角色。
     *
     * @param roleNames 角色列表
     * @return 属于:true,否则false
     */
    public boolean hasAnyRoles(String roleNames) {
        boolean hasAnyRole = false;
        Subject subject = getSubject();
        if (subject != null && roleNames != null && roleNames.length() > 0) {
            for (String role : roleNames.split(NAMES_DELIMETER)) {
                if (subject.hasRole(role.trim())) {
                    hasAnyRole = true;
                    break;
                }
            }
        }
        return hasAnyRole;
    }
    /**
     * 验证当前用户是否属于以下所有角色。
     *
     * @param roleNames 角色列表
     * @return 属于:true,否则false
     */
    public boolean hasAllRoles(String roleNames) {
        boolean hasAllRole = true;
        Subject subject = getSubject();
        if (subject != null && roleNames != null && roleNames.length() > 0) {
            for (String role : roleNames.split(NAMES_DELIMETER)) {
                if (!subject.hasRole(role.trim())) {
                    hasAllRole = false;
                    break;
                }
            }
        }
        return hasAllRole;
    }
    /**
     * 验证当前用户是否拥有指定权限,使用时与lacksPermission 搭配使用
     *
     * @param permission 权限名
     * @return 拥有权限:true,否则false
     */
    public boolean hasPermission(String permission) {
        return getSubject() != null && permission != null
                && permission.length() > 0
                && getSubject().isPermitted(permission);
    }
    /**
     * 与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过。
     *
     * @param permission 权限名
     * @return 拥有权限:true,否则false
     */
    public boolean lacksPermission(String permission) {
        return !hasPermission(permission);
    }
    /**
     * 已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。与notAuthenticated搭配使用
     *
     * @return 通过身份验证:true,否则false
     */
    public boolean authenticated() {
        return getSubject() != null && getSubject().isAuthenticated();
    }
    /**
     * 未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户。。
     *
     * @return 没有通过身份验证:true,否则false
     */
    public boolean notAuthenticated() {
        return !authenticated();
    }
    /**
     * 认证通过或已记住的用户。与guset搭配使用。
     *
     * @return 用户:true,否则 false
     */
    public boolean isUser() {
        return getSubject() != null && getSubject().getPrincipal() != null;
    }
    /**
     * 验证当前用户是否为“访客”,即未认证(包含未记住)的用户。用user搭配使用
     *
     * @return 访客:true,否则false
     */
    public boolean isGuest() {
        return !isUser();
    }
    /**
     * 输出当前用户信息,通常为登录帐号信息。
     *
     * @return 当前用户信息
     */
    public String principal() {
        if (getSubject() != null) {
            Object principal = getSubject().getPrincipal();
            return principal.toString();
        }
        return "";
    }
    public static void main(String[] args) {
        GroupTemplate gt = new GroupTemplate();
        gt.registerFunctionPackage("shiro", new ShiroExt());
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/annotion/BussinessLog.java
New file
@@ -0,0 +1,33 @@
package com.agentdriving.driver.core.common.annotion;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
import com.agentdriving.driver.core.common.constant.dictmap.base.SystemDict;
import java.lang.annotation.*;
/**
 * 标记需要做业务日志的方法
 *
 * @author fengshuonan
 * @date 2017-03-31 12:46
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface BussinessLog {
    /**
     * 业务的名称,例如:"修改菜单"
     */
    String value() default "";
    /**
     * 被修改的实体的唯一标识,例如:菜单实体的唯一标识为"id"
     */
    String key() default "id";
    /**
     * 字典(用于查找key的中文名称和字段的中文名称)
     */
    Class<? extends AbstractDictMap> dict() default SystemDict.class;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/annotion/Permission.java
New file
@@ -0,0 +1,22 @@
package com.agentdriving.driver.core.common.annotion;
import java.lang.annotation.*;
/**
 * 权限注解 用于检查权限 规定访问权限
 *
 * @example @Permission({role1,role2})
 * @example @Permission
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Permission {
    /**
     * <p>角色英文名称</p>
     * <p>使用注解时加上这个值表示限制只有某个角色的才可以访问对应的资源</p>
     * <p>常用在某些资源限制只有超级管理员角色才可访问</p>
     */
    String[] value() default {};
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/annotion/ServiceLog.java
New file
@@ -0,0 +1,24 @@
package com.agentdriving.driver.core.common.annotion;
import java.lang.annotation.*;
/**
 * 接口日志注解
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface ServiceLog {
    /**
     * 接口名称
     * @return
     */
    String name() default "";
    /**
     * 接口地址
     * @return
     */
    String url() default "";
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/aspect/ServiceLogAspect.java
New file
@@ -0,0 +1,73 @@
package com.agentdriving.driver.core.common.aspect;
import com.alibaba.fastjson.JSONObject;
import com.agentdriving.driver.core.common.annotion.ServiceLog;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
//@Aspect
//@Component
public class ServiceLogAspect {
    Logger logger = LoggerFactory.getLogger("ServiceLog");
    /**
     * //切面点为标记了@ServiceLog注解的方法
     */
    @Pointcut("@annotation(com.agentdriving.driver.core.common.annotion.ServiceLog)")
    public void serviceLog(){
    }
    //环绕通知
    @Around("serviceLog()")
    @SuppressWarnings("unchecked")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        try {
            long starTime = System.currentTimeMillis();
            //通过反射获取被调用方法的Class
            Class type = joinPoint.getSignature().getDeclaringType();
            //获取类名
            String typeName = type.getSimpleName();
            //方法名
            String methodName = joinPoint.getSignature().getName();
            //获取参数列表
            Object[] args = joinPoint.getArgs();
            //参数Class的数组
            Class[] clazz = new Class[args.length];
            for (int i = 0; i < args.length; i++) {
                clazz[i] = args[i].getClass();
            }
            //通过反射获取调用的方法method
            Method method = type.getMethod(methodName, clazz);
            ServiceLog serviceLog = method.getAnnotation(ServiceLog.class);
            //获取方法的参数
            Parameter[] parameters = method.getParameters();
            JSONObject jsonObject = new JSONObject();
            for (int i = 0; i < parameters.length; i++) {
                Parameter parameter = parameters[i];
                String name = parameter.getName();
                jsonObject.put(name, args[i]);
            }
            //执行结果
            //执行目标方法,获取执行结果
            Object res = joinPoint.proceed();
            logger.debug("调用{}.{}方法成功\n" +
                            "接口名称:{}\n" +
                            "接口地址:{}\n" +
                            "耗时:{}ms\n" +
                            "参数为:{}\n" +
                            "返回结果:{}", typeName, methodName, serviceLog.name(), serviceLog.url(),
                    (System.currentTimeMillis() - starTime), jsonObject.toJSONString(), JSONObject.toJSONString(res));
        }catch (Exception e){
            e.printStackTrace();
        }
        return joinPoint.proceed();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/Const.java
New file
@@ -0,0 +1,36 @@
package com.agentdriving.driver.core.common.constant;
/**
 * 系统常量
 *
 * @author fengshuonan
 * @date 2017年2月12日 下午9:42:53
 */
public interface Const {
    /**
     * 系统默认的管理员密码
     */
    String DEFAULT_PWD = "111111";
    /**
     * 管理员角色的名字
     */
    String ADMIN_NAME = "administrator";
    /**
     * 管理员id
     */
    Integer ADMIN_ID = 1;
    /**
     * 超级管理员角色id
     */
    Integer ADMIN_ROLE_ID = 1;
    /**
     * 接口文档的菜单名
     */
    String API_MENU_NAME = "接口文档";
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/DatasourceEnum.java
New file
@@ -0,0 +1,15 @@
package com.agentdriving.driver.core.common.constant;
/**
 *
 * 多数据源的枚举
 *
 * @author fengshuonan
 * @date 2017年3月5日 上午10:15:02
 */
public interface DatasourceEnum {
    String DATA_SOURCE_GUNS = "dataSourceGuns";            //guns数据源
    String DATA_SOURCE_BIZ = "dataSourceBiz";            //其他业务的数据源
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/JwtConstants.java
New file
@@ -0,0 +1,19 @@
package com.agentdriving.driver.core.common.constant;
/**
 * jwt相关配置
 *
 * @author fengshuonan
 * @date 2017-08-23 9:23
 */
public interface JwtConstants {
    String AUTH_HEADER = "Authorization";
    String SECRET = "defaultSecret";
    Long EXPIRATION = 604800L;
    String AUTH_PATH = "/gunsApi/auth";
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/cache/Cache.java
New file
@@ -0,0 +1,15 @@
package com.agentdriving.driver.core.common.constant.cache;
/**
 * 所有缓存名称的集合
 *
 * @author fengshuonan
 * @date 2017-04-24 21:56
 */
public interface Cache {
    /**
     * 常量缓存
     */
    String CONSTANT = "CONSTANT";
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/cache/CacheKey.java
New file
@@ -0,0 +1,31 @@
package com.agentdriving.driver.core.common.constant.cache;
/**
 * 缓存标识前缀集合,常用在ConstantFactory类中
 *
 * @author fengshuonan
 * @date 2017-04-25 9:37
 */
public interface CacheKey {
    /**
     * 角色名称(多个)
     */
    String ROLES_NAME = "roles_name_";
    /**
     * 角色名称(单个)
     */
    String SINGLE_ROLE_NAME = "single_role_name_";
    /**
     * 角色英文名称
     */
    String SINGLE_ROLE_TIP = "single_role_tip_";
    /**
     * 部门名称
     */
    String DEPT_NAME = "dept_name_";
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/DeleteDict.java
New file
@@ -0,0 +1,31 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 用于删除业务的字典
 *
 * @author fengshuonan
 * @date 2017-05-06 15:01
 */
public class DeleteDict extends AbstractDictMap {
    @Override
    public void init() {
        put("roleId","角色名称");
        put("deptId", "部门名称");
        put("menuId", "菜单名称");
        put("dictId", "字典名称");
        put("noticeId", "标题");
    }
    @Override
    protected void initBeWrapped() {
        putFieldWrapperMethodName("roleId","getCacheObject");
        putFieldWrapperMethodName("deptId","getCacheObject");
        putFieldWrapperMethodName("menuId","getCacheObject");
        putFieldWrapperMethodName("dictId","getCacheObject");
        putFieldWrapperMethodName("noticeId","getCacheObject");
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/DeptDict.java
New file
@@ -0,0 +1,28 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 部门的映射
 *
 * @author fengshuonan
 * @date 2017-05-06 15:01
 */
public class DeptDict extends AbstractDictMap {
    @Override
    public void init() {
        put("deptId", "部门名称");
        put("num", "部门排序");
        put("pid", "上级名称");
        put("simplename", "部门简称");
        put("fullname", "部门全称");
        put("tips", "备注");
    }
    @Override
    protected void initBeWrapped() {
        putFieldWrapperMethodName("deptId", "getDeptName");
        putFieldWrapperMethodName("pid", "getDeptName");
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/DictMap.java
New file
@@ -0,0 +1,24 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 字典map
 *
 * @author fengshuonan
 * @date 2017-05-06 15:43
 */
public class DictMap extends AbstractDictMap {
    @Override
    public void init() {
        put("dictId","字典名称");
        put("dictName","字典名称");
        put("dictValues","字典内容");
    }
    @Override
    protected void initBeWrapped() {
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/LogDict.java
New file
@@ -0,0 +1,22 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 日志的字典
 *
 * @author fengshuonan
 * @date 2017-05-06 15:01
 */
public class LogDict extends AbstractDictMap {
    @Override
    public void init() {
        put("tips","备注");
    }
    @Override
    protected void initBeWrapped() {
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/MenuDict.java
New file
@@ -0,0 +1,34 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 菜单的字典
 *
 * @author fengshuonan
 * @date 2017-05-06 15:01
 */
public class MenuDict extends AbstractDictMap {
    @Override
    public void init() {
        put("menuId","菜单id");
        put("id","菜单id");
        put("code","菜单编号");
        put("pcode","菜单父编号");
        put("name","菜单名称");
        put("icon","菜单图标");
        put("url","url地址");
        put("num","菜单排序号");
        put("levels","菜单层级");
        put("tips","备注");
        put("status","菜单状态");
        put("isopen","是否打开");
        put("","");
    }
    @Override
    protected void initBeWrapped() {
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/NoticeMap.java
New file
@@ -0,0 +1,22 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 通知的映射
 *
 * @author fengshuonan
 * @date 2017-05-06 15:01
 */
public class NoticeMap extends AbstractDictMap {
    @Override
    public void init() {
        put("title", "标题");
        put("content", "内容");
    }
    @Override
    protected void initBeWrapped() {
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/RoleDict.java
New file
@@ -0,0 +1,31 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 角色的字典
 *
 * @author fengshuonan
 * @date 2017-05-06 15:01
 */
public class RoleDict extends AbstractDictMap {
    @Override
    public void init() {
        put("roleId","角色名称");
        put("num","角色排序");
        put("pid","角色的父级");
        put("name","角色名称");
        put("deptid","部门名称");
        put("tips","备注");
        put("ids","资源名称");
    }
    @Override
    protected void initBeWrapped() {
        putFieldWrapperMethodName("pid","getSingleRoleName");
        putFieldWrapperMethodName("deptid","getDeptName");
        putFieldWrapperMethodName("roleId","getSingleRoleName");
        putFieldWrapperMethodName("ids","getMenuNames");
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/UserDict.java
New file
@@ -0,0 +1,36 @@
package com.agentdriving.driver.core.common.constant.dictmap;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
/**
 * 用户的字典
 *
 * @author fengshuonan
 * @date 2017-05-06 15:01
 */
public class UserDict extends AbstractDictMap {
    @Override
    public void init() {
        put("userId","账号");
        put("avatar","头像");
        put("account","账号");
        put("name","名字");
        put("birthday","生日");
        put("sex","性别");
        put("email","电子邮件");
        put("phone","电话");
        put("roleid","角色名称");
        put("deptid","部门名称");
        put("roleIds","角色名称集合");
    }
    @Override
    protected void initBeWrapped() {
        putFieldWrapperMethodName("sex","getSexName");
        putFieldWrapperMethodName("deptid","getDeptName");
        putFieldWrapperMethodName("roleid","getSingleRoleName");
        putFieldWrapperMethodName("userId","getUserAccountById");
        putFieldWrapperMethodName("roleIds","getRoleName");
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/base/AbstractDictMap.java
New file
@@ -0,0 +1,53 @@
package com.agentdriving.driver.core.common.constant.dictmap.base;
import java.util.HashMap;
/**
 * 字典映射抽象类
 *
 * @author fengshuonan
 * @date 2017-05-06 14:58
 */
public abstract class AbstractDictMap {
    protected HashMap<String, String> dictory = new HashMap<>();
    protected HashMap<String, String> fieldWarpperDictory = new HashMap<>();
    public AbstractDictMap(){
        put("id","主键id");
        init();
        initBeWrapped();
    }
    /**
     * 初始化字段英文名称和中文名称对应的字典
     *
     * @author stylefeng
     * @Date 2017/5/9 19:39
     */
    public abstract void init();
    /**
     * 初始化需要被包装的字段(例如:性别为1:男,2:女,需要被包装为汉字)
     *
     * @author stylefeng
     * @Date 2017/5/9 19:35
     */
    protected abstract void initBeWrapped();
    public String get(String key) {
        return this.dictory.get(key);
    }
    public void put(String key, String value) {
        this.dictory.put(key, value);
    }
    public String getFieldWarpperMethodName(String key){
        return this.fieldWarpperDictory.get(key);
    }
    public void putFieldWrapperMethodName(String key,String methodName){
        this.fieldWarpperDictory.put(key,methodName);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/base/SystemDict.java
New file
@@ -0,0 +1,20 @@
package com.agentdriving.driver.core.common.constant.dictmap.base;
/**
 * 系统相关的字典
 *
 * @author fengshuonan
 * @date 2017-05-06 15:48
 */
public class SystemDict extends AbstractDictMap {
    @Override
    public void init() {
    }
    @Override
    protected void initBeWrapped() {
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/dictmap/factory/DictFieldWarpperFactory.java
New file
@@ -0,0 +1,33 @@
package com.agentdriving.driver.core.common.constant.dictmap.factory;
import com.agentdriving.driver.core.common.constant.factory.ConstantFactory;
import com.agentdriving.driver.core.common.constant.factory.IConstantFactory;
import com.agentdriving.driver.core.common.exception.BizExceptionEnum;
import com.agentdriving.driver.core.exception.GunsException;
import java.lang.reflect.Method;
/**
 * 字典字段的包装器(从ConstantFactory中获取包装值)
 *
 * @author fengshuonan
 * @date 2017-05-06 15:12
 */
public class DictFieldWarpperFactory {
    public static Object createFieldWarpper(Object parameter, String methodName) {
        IConstantFactory constantFactory = ConstantFactory.me();
        try {
            Method method = IConstantFactory.class.getMethod(methodName, parameter.getClass());
            return method.invoke(constantFactory, parameter);
        } catch (Exception e) {
            try {
                Method method = IConstantFactory.class.getMethod(methodName, Integer.class);
                return method.invoke(constantFactory, Integer.parseInt(parameter.toString()));
            } catch (Exception e1) {
                throw new GunsException(BizExceptionEnum.ERROR_WRAPPER_FIELD);
            }
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/ConstantFactory.java
New file
@@ -0,0 +1,335 @@
package com.agentdriving.driver.core.common.constant.factory;
import com.agentdriving.driver.core.common.constant.cache.Cache;
import com.agentdriving.driver.core.common.constant.cache.CacheKey;
import com.agentdriving.driver.core.common.constant.state.ManagerStatus;
import com.agentdriving.driver.core.common.constant.state.MenuStatus;
import com.agentdriving.driver.core.log.LogObjectHolder;
import com.agentdriving.driver.core.support.StrKit;
import com.agentdriving.driver.core.util.Convert;
import com.agentdriving.driver.core.util.SpringContextHolder;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.dao.*;
import com.agentdriving.driver.modular.system.model.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.agentdriving.driver.modular.system.dao.*;
import com.agentdriving.driver.modular.system.model.*;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
 * 常量的生产工厂
 *
 * @author fengshuonan
 * @date 2017年2月13日 下午10:55:21
 */
@Component
@DependsOn("springContextHolder")
public class ConstantFactory implements IConstantFactory {
    private RoleMapper roleMapper = SpringContextHolder.getBean(RoleMapper.class);
    private DeptMapper deptMapper = SpringContextHolder.getBean(DeptMapper.class);
    private DictMapper dictMapper = SpringContextHolder.getBean(DictMapper.class);
    private UserMapper userMapper = SpringContextHolder.getBean(UserMapper.class);
    private MenuMapper menuMapper = SpringContextHolder.getBean(MenuMapper.class);
    private NoticeMapper noticeMapper = SpringContextHolder.getBean(NoticeMapper.class);
    public static IConstantFactory me() {
        return SpringContextHolder.getBean("constantFactory");
    }
    /**
     * 根据用户id获取用户名称
     *
     * @author stylefeng
     * @Date 2017/5/9 23:41
     */
    @Override
    public String getUserNameById(Integer userId) {
        User user = userMapper.selectById(userId);
        if (user != null) {
            return user.getName();
        } else {
            return "--";
        }
    }
    /**
     * 根据用户id获取用户账号
     *
     * @author stylefeng
     * @date 2017年5月16日21:55:371
     */
    @Override
    public String getUserAccountById(Integer userId) {
        User user = userMapper.selectById(userId);
        if (user != null) {
            return user.getAccount();
        } else {
            return "--";
        }
    }
    /**
     * 通过角色ids获取角色名称
     */
    @Override
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.ROLES_NAME + "'+#roleIds")
    public String getRoleName(String roleIds) {
        Integer[] roles = Convert.toIntArray(roleIds);
        StringBuilder sb = new StringBuilder();
        for (int role : roles) {
            Role roleObj = roleMapper.selectById(role);
            if (ToolUtil.isNotEmpty(roleObj) && ToolUtil.isNotEmpty(roleObj.getName())) {
                sb.append(roleObj.getName()).append(",");
            }
        }
        return StrKit.removeSuffix(sb.toString(), ",");
    }
    /**
     * 通过角色id获取角色名称
     */
    @Override
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId")
    public String getSingleRoleName(Integer roleId) {
        if (0 == roleId) {
            return "--";
        }
        Role roleObj = roleMapper.selectById(roleId);
        if (ToolUtil.isNotEmpty(roleObj) && ToolUtil.isNotEmpty(roleObj.getName())) {
            return roleObj.getName();
        }
        return "";
    }
    /**
     * 通过角色id获取角色英文名称
     */
    @Override
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_TIP + "'+#roleId")
    public String getSingleRoleTip(Integer roleId) {
        if (0 == roleId) {
            return "--";
        }
        Role roleObj = roleMapper.selectById(roleId);
        if (ToolUtil.isNotEmpty(roleObj) && ToolUtil.isNotEmpty(roleObj.getName())) {
            return roleObj.getTips();
        }
        return "";
    }
    /**
     * 获取部门名称
     */
    @Override
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.DEPT_NAME + "'+#deptId")
    public String getDeptName(Integer deptId) {
        Dept dept = deptMapper.selectById(deptId);
        if (ToolUtil.isNotEmpty(dept) && ToolUtil.isNotEmpty(dept.getFullname())) {
            return dept.getFullname();
        }
        return "";
    }
    /**
     * 获取菜单的名称们(多个)
     */
    @Override
    public String getMenuNames(String menuIds) {
        Integer[] menus = Convert.toIntArray(menuIds);
        StringBuilder sb = new StringBuilder();
        for (int menu : menus) {
            Menu menuObj = menuMapper.selectById(menu);
            if (ToolUtil.isNotEmpty(menuObj) && ToolUtil.isNotEmpty(menuObj.getName())) {
                sb.append(menuObj.getName()).append(",");
            }
        }
        return StrKit.removeSuffix(sb.toString(), ",");
    }
    /**
     * 获取菜单名称
     */
    @Override
    public String getMenuName(Long menuId) {
        if (ToolUtil.isEmpty(menuId)) {
            return "";
        } else {
            Menu menu = menuMapper.selectById(menuId);
            if (menu == null) {
                return "";
            } else {
                return menu.getName();
            }
        }
    }
    /**
     * 获取菜单名称通过编号
     */
    @Override
    public String getMenuNameByCode(String code) {
        if (ToolUtil.isEmpty(code)) {
            return "";
        } else {
            Menu param = new Menu();
            param.setCode(code);
            Menu menu = menuMapper.selectOne(param);
            if (menu == null) {
                return "";
            } else {
                return menu.getName();
            }
        }
    }
    /**
     * 获取字典名称
     */
    @Override
    public String getDictName(Integer dictId) {
        if (ToolUtil.isEmpty(dictId)) {
            return "";
        } else {
            Dict dict = dictMapper.selectById(dictId);
            if (dict == null) {
                return "";
            } else {
                return dict.getName();
            }
        }
    }
    /**
     * 获取通知标题
     */
    @Override
    public String getNoticeTitle(Integer dictId) {
        if (ToolUtil.isEmpty(dictId)) {
            return "";
        } else {
            Notice notice = noticeMapper.selectById(dictId);
            if (notice == null) {
                return "";
            } else {
                return notice.getTitle();
            }
        }
    }
    /**
     * 根据字典名称和字典中的值获取对应的名称
     */
    @Override
    public String getDictsByName(String name, Integer val) {
        Dict temp = new Dict();
        temp.setName(name);
        Dict dict = dictMapper.selectOne(temp);
        if (dict == null) {
            return "";
        } else {
            Wrapper<Dict> wrapper = new EntityWrapper<>();
            wrapper = wrapper.eq("pid", dict.getId());
            List<Dict> dicts = dictMapper.selectList(wrapper);
            for (Dict item : dicts) {
                if (item.getNum() != null && item.getNum().equals(val)) {
                    return item.getName();
                }
            }
            return "";
        }
    }
    /**
     * 获取性别名称
     */
    @Override
    public String getSexName(Integer sex) {
        return getDictsByName("性别", sex);
    }
    /**
     * 获取用户登录状态
     */
    @Override
    public String getStatusName(Integer status) {
        return ManagerStatus.valueOf(status);
    }
    /**
     * 获取菜单状态
     */
    @Override
    public String getMenuStatusName(Integer status) {
        return MenuStatus.valueOf(status);
    }
    /**
     * 查询字典
     */
    @Override
    public List<Dict> findInDict(Integer id) {
        if (ToolUtil.isEmpty(id)) {
            return null;
        } else {
            EntityWrapper<Dict> wrapper = new EntityWrapper<>();
            List<Dict> dicts = dictMapper.selectList(wrapper.eq("pid", id));
            if (dicts == null || dicts.size() == 0) {
                return null;
            } else {
                return dicts;
            }
        }
    }
    /**
     * 获取被缓存的对象(用户删除业务)
     */
    @Override
    public String getCacheObject(String para) {
        return LogObjectHolder.me().get().toString();
    }
    /**
     * 获取子部门id
     */
    @Override
    public List<Integer> getSubDeptId(Integer deptid) {
        Wrapper<Dept> wrapper = new EntityWrapper<>();
        wrapper = wrapper.like("pids", "%[" + deptid + "]%");
        List<Dept> depts = this.deptMapper.selectList(wrapper);
        ArrayList<Integer> deptids = new ArrayList<>();
        if(depts != null && depts.size() > 0){
            for (Dept dept : depts) {
                deptids.add(dept.getId());
            }
        }
        return deptids;
    }
    /**
     * 获取所有父部门id
     */
    @Override
    public List<Integer> getParentDeptIds(Integer deptid) {
        Dept dept = deptMapper.selectById(deptid);
        String pids = dept.getPids();
        String[] split = pids.split(",");
        ArrayList<Integer> parentDeptIds = new ArrayList<>();
        for (String s : split) {
            parentDeptIds.add(Integer.valueOf(StrKit.removeSuffix(StrKit.removePrefix(s, "["), "]")));
        }
        return parentDeptIds;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/IConstantFactory.java
New file
@@ -0,0 +1,116 @@
package com.agentdriving.driver.core.common.constant.factory;
import com.agentdriving.driver.modular.system.model.Dict;
import java.util.List;
/**
 * 常量生产工厂的接口
 *
 * @author fengshuonan
 * @date 2017-06-14 21:12
 */
public interface IConstantFactory {
    /**
     * 根据用户id获取用户名称
     *
     * @author stylefeng
     * @Date 2017/5/9 23:41
     */
    String getUserNameById(Integer userId);
    /**
     * 根据用户id获取用户账号
     *
     * @author stylefeng
     * @date 2017年5月16日21:55:371
     */
    String getUserAccountById(Integer userId);
    /**
     * 通过角色ids获取角色名称
     */
    String getRoleName(String roleIds);
    /**
     * 通过角色id获取角色名称
     */
    String getSingleRoleName(Integer roleId);
    /**
     * 通过角色id获取角色英文名称
     */
    String getSingleRoleTip(Integer roleId);
    /**
     * 获取部门名称
     */
    String getDeptName(Integer deptId);
    /**
     * 获取菜单的名称们(多个)
     */
    String getMenuNames(String menuIds);
    /**
     * 获取菜单名称
     */
    String getMenuName(Long menuId);
    /**
     * 获取菜单名称通过编号
     */
    String getMenuNameByCode(String code);
    /**
     * 获取字典名称
     */
    String getDictName(Integer dictId);
    /**
     * 获取通知标题
     */
    String getNoticeTitle(Integer dictId);
    /**
     * 根据字典名称和字典中的值获取对应的名称
     */
    String getDictsByName(String name, Integer val);
    /**
     * 获取性别名称
     */
    String getSexName(Integer sex);
    /**
     * 获取用户登录状态
     */
    String getStatusName(Integer status);
    /**
     * 获取菜单状态
     */
    String getMenuStatusName(Integer status);
    /**
     * 查询字典
     */
    List<Dict> findInDict(Integer id);
    /**
     * 获取被缓存的对象(用户删除业务)
     */
    String getCacheObject(String para);
    /**
     * 获取子部门id
     */
    List<Integer> getSubDeptId(Integer deptid);
    /**
     * 获取所有父部门id
     */
    List<Integer> getParentDeptIds(Integer deptid);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/MutiStrFactory.java
New file
@@ -0,0 +1,96 @@
package com.agentdriving.driver.core.common.constant.factory;
import com.agentdriving.driver.core.support.StrKit;
import com.agentdriving.driver.core.util.ToolUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 组合字符串生产者
 *
 * @author fengshuonan
 * @date 2017-04-27 16:42
 */
public class MutiStrFactory {
    /**
     * 每个条目之间的分隔符
     */
    public static final String ITEM_SPLIT = ";";
    /**
     * 属性之间的分隔符
     */
    public static final String ATTR_SPLIT = ":";
    /**
     * 拼接字符串的id
     */
    public static final String MUTI_STR_ID = "ID";
    /**
     * 拼接字符串的CODE
     */
    public static final String MUTI_STR_CODE = "CODE";
    /**
     * 拼接字符串的NAME
     */
    public static final String MUTI_STR_NAME = "NAME";
    /**
     * 拼接字符串的NUM
     */
    public static final String MUTI_STR_NUM = "NUM";
    /**
     * 解析一个组合字符串(例如:  "1:启用;2:禁用;3:冻结"  这样的字符串)
     *
     * @author fengshuonan
     * @Date 2017/4/27 16:44
     */
    public static List<Map<String,String>> parseKeyValue(String mutiString){
        if(ToolUtil.isEmpty(mutiString)){
            return new ArrayList<>();
        }else{
            ArrayList<Map<String,String>> results = new ArrayList<>();
            String[] items = StrKit.split(StrKit.removeSuffix(mutiString, ITEM_SPLIT), ITEM_SPLIT);
            for (String item : items) {
                String[] attrs = item.split(ATTR_SPLIT);
                HashMap<String, String> itemMap = new HashMap<>();
                itemMap.put(MUTI_STR_CODE,attrs[0]);
                itemMap.put(MUTI_STR_NAME,attrs[1]);
                itemMap.put(MUTI_STR_NUM,attrs[2]);
                results.add(itemMap);
            }
            return results;
        }
    }
    /**
     * 解析id:key:value这样类型的字符串
     *
     * @author fengshuonan
     * @Date 2017/4/28 11:06
     */
    public static List<Map<String,String>> parseIdKeyValue(String mutiString){
        if(ToolUtil.isEmpty(mutiString)){
            return new ArrayList<>();
        }else{
            ArrayList<Map<String,String>> results = new ArrayList<>();
            String[] items = StrKit.split(StrKit.removeSuffix(mutiString, ITEM_SPLIT), ITEM_SPLIT);
            for (String item : items) {
                String[] attrs = item.split(ATTR_SPLIT);
                HashMap<String, String> itemMap = new HashMap<>();
                itemMap.put(MUTI_STR_CODE,attrs[0]);
                itemMap.put(MUTI_STR_NAME,attrs[1]);
                itemMap.put(MUTI_STR_NUM,attrs[2]);
                results.add(itemMap);
            }
            return results;
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/factory/PageFactory.java
New file
@@ -0,0 +1,38 @@
package com.agentdriving.driver.core.common.constant.factory;
import com.agentdriving.driver.core.common.constant.state.Order;
import com.agentdriving.driver.core.support.HttpKit;
import com.agentdriving.driver.core.util.ToolUtil;
import com.baomidou.mybatisplus.plugins.Page;
import javax.servlet.http.HttpServletRequest;
/**
 * BootStrap Table默认的分页参数创建
 *
 * @author fengshuonan
 * @date 2017-04-05 22:25
 */
public class PageFactory<T> {
    public Page<T> defaultPage() {
        HttpServletRequest request = HttpKit.getRequest();
        int limit = Integer.valueOf(request.getParameter("limit"));     //每页多少条数据
        int offset = Integer.valueOf(request.getParameter("offset"));   //每页的偏移量(本页当前有多少条)
        String sort = request.getParameter("sort");         //排序字段名称
        String order = request.getParameter("order");       //asc或desc(升序或降序)
        if (ToolUtil.isEmpty(sort)) {
            Page<T> page = new Page<>((offset / limit + 1), limit);
            page.setOpenSort(false);
            return page;
        } else {
            Page<T> page = new Page<>((offset / limit + 1), limit, sort);
            if (Order.ASC.getDes().equals(order)) {
                page.setAsc(true);
            } else {
                page.setAsc(false);
            }
            return page;
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/BizLogType.java
New file
@@ -0,0 +1,51 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 业务日志类型
 *
 * @author fengshuonan
 * @Date 2017年1月22日 下午12:14:59
 */
public enum BizLogType {
    ALL(0, null),//全部日志
    BUSSINESS(1, "业务日志"),
    EXCEPTION(2, "异常日志");
    Integer val;
    String message;
    BizLogType(Integer val, String message) {
        this.val = val;
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Integer getVal() {
        return val;
    }
    public void setVal(Integer val) {
        this.val = val;
    }
    public static String valueOf(Integer value) {
        if (value == null) {
            return null;
        } else {
            for (BizLogType bizLogType : BizLogType.values()) {
                if (bizLogType.getVal().equals(value)) {
                    return bizLogType.getMessage();
                }
            }
            return null;
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/ExpenseState.java
New file
@@ -0,0 +1,52 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 是否是菜单的枚举
 *
 * @author fengshuonan
 * @date 2017年6月1日22:50:11
 */
public enum ExpenseState {
    SUBMITING(1, "待提交"),
    CHECKING(2, "待审核"),
    PASS(3, "审核通过"),
    UN_PASS(4, "未通过");
    int code;
    String message;
    ExpenseState(int code, String message) {
        this.code = code;
        this.message = message;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public static String valueOf(Integer status) {
        if (status == null) {
            return "";
        } else {
            for (ExpenseState s : ExpenseState.values()) {
                if (s.getCode() == status) {
                    return s.getMessage();
                }
            }
            return "";
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/LogSucceed.java
New file
@@ -0,0 +1,27 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 业务是否成功的日志记录
 *
 * @author fengshuonan
 * @Date 2017年1月22日 下午12:14:59
 */
public enum LogSucceed {
    SUCCESS("成功"),
    FAIL("失败");
    String message;
    LogSucceed(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/LogType.java
New file
@@ -0,0 +1,30 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 日志类型
 *
 * @author fengshuonan
 * @Date 2017年1月22日 下午12:14:59
 */
public enum LogType {
    LOGIN("登录日志"),
    LOGIN_FAIL("登录失败日志"),
    EXIT("退出日志"),
    EXCEPTION("异常日志"),
    BUSSINESS("业务日志");
    String message;
    LogType(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/ManagerStatus.java
New file
@@ -0,0 +1,49 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 管理员的状态
 *
 * @author fengshuonan
 * @Date 2017年1月10日 下午9:54:13
 */
public enum ManagerStatus {
    OK(1, "启用"), FREEZED(2, "冻结"), DELETED(3, "被删除");
    int code;
    String message;
    ManagerStatus(int code, String message) {
        this.code = code;
        this.message = message;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public static String valueOf(Integer value) {
        if (value == null) {
            return "";
        } else {
            for (ManagerStatus ms : ManagerStatus.values()) {
                if (ms.getCode() == value) {
                    return ms.getMessage();
                }
            }
            return "";
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/MenuOpenStatus.java
New file
@@ -0,0 +1,50 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 菜单是否打开的状态
 *
 * @author fengshuonan
 * @Date 2017年4月8日10:12:15
 */
public enum MenuOpenStatus {
    OPEN(1, "打开"),
    CLOSE(0, "关闭");
    int code;
    String message;
    MenuOpenStatus(int code, String message) {
        this.code = code;
        this.message = message;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public static String valueOf(Integer status) {
        if (status == null) {
            return "";
        } else {
            for (MenuOpenStatus s : MenuOpenStatus.values()) {
                if (s.getCode() == status) {
                    return s.getMessage();
                }
            }
            return "";
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/MenuStatus.java
New file
@@ -0,0 +1,50 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 菜单的状态
 *
 * @author fengshuonan
 * @Date 2017年1月22日 下午12:14:59
 */
public enum MenuStatus {
    ENABLE(1, "启用"),
    DISABLE(0, "禁用");
    int code;
    String message;
    MenuStatus(int code, String message) {
        this.code = code;
        this.message = message;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public static String valueOf(Integer status) {
        if (status == null) {
            return "";
        } else {
            for (MenuStatus s : MenuStatus.values()) {
                if (s.getCode() == status) {
                    return s.getMessage();
                }
            }
            return "";
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/constant/state/Order.java
New file
@@ -0,0 +1,26 @@
package com.agentdriving.driver.core.common.constant.state;
/**
 * 数据库排序
 *
 * @author fengshuonan
 * @Date 2017年5月31日20:48:41
 */
public enum Order {
    ASC("asc"), DESC("desc");
    private String des;
    Order(String des) {
        this.des = des;
    }
    public String getDes() {
        return des;
    }
    public void setDes(String des) {
        this.des = des;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/exception/BizExceptionEnum.java
New file
@@ -0,0 +1,100 @@
package com.agentdriving.driver.core.common.exception;
import com.agentdriving.driver.core.exception.ServiceExceptionEnum;
/**
 * @author fengshuonan
 * @Description 所有业务异常的枚举
 * @date 2016年11月12日 下午5:04:51
 */
public enum BizExceptionEnum implements ServiceExceptionEnum {
    /**
     * 字典
     */
    DICT_EXISTED(400, "字典已经存在"),
    ERROR_CREATE_DICT(500, "创建字典失败"),
    ERROR_WRAPPER_FIELD(500, "包装字典属性失败"),
    ERROR_CODE_EMPTY(500, "字典类型不能为空"),
    /**
     * 文件上传
     */
    FILE_READING_ERROR(400, "FILE_READING_ERROR!"),
    FILE_NOT_FOUND(400, "FILE_NOT_FOUND!"),
    UPLOAD_ERROR(500, "上传图片出错"),
    /**
     * 权限和数据问题
     */
    DB_RESOURCE_NULL(400, "数据库中没有该资源"),
    NO_PERMITION(405, "权限异常"),
    REQUEST_INVALIDATE(400, "请求数据格式不正确"),
    INVALID_KAPTCHA(400, "验证码不正确"),
    CANT_DELETE_ADMIN(600, "不能删除超级管理员"),
    CANT_FREEZE_ADMIN(600, "不能冻结超级管理员"),
    CANT_CHANGE_ADMIN(600, "不能修改超级管理员角色"),
    /**
     * 账户问题
     */
    USER_ALREADY_REG(401, "该用户已经注册"),
    NO_THIS_USER(400, "没有此用户"),
    USER_NOT_EXISTED(400, "没有此用户"),
    ACCOUNT_FREEZED(401, "账号被冻结"),
    OLD_PWD_NOT_RIGHT(402, "原密码不正确"),
    TWO_PWD_NOT_MATCH(405, "两次输入密码不一致"),
    /**
     * 错误的请求
     */
    MENU_PCODE_COINCIDENCE(400, "菜单编号和副编号不能一致"),
    EXISTED_THE_MENU(400, "菜单编号重复,不能添加"),
    DICT_MUST_BE_NUMBER(400, "字典的值必须为数字"),
    REQUEST_NULL(400, "请求有错误"),
    SESSION_TIMEOUT(400, "会话超时"),
    SERVER_ERROR(500, "服务器异常"),
    /**
     * token异常
     */
    TOKEN_EXPIRED(600, "token过期"),
    TOKEN_ERROR(600, "token验证失败"),
    /**
     * 签名异常
     */
    SIGN_ERROR(10040, "签名验证失败"),
    /**
     * 其他
     */
    AUTH_REQUEST_ERROR(400, "账号密码错误");
    BizExceptionEnum(int code, String message) {
        this.code = code;
        this.message = message;
    }
    private Integer code;
    private String message;
    @Override
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    @Override
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/common/exception/InvalidKaptchaException.java
New file
@@ -0,0 +1,10 @@
package com.agentdriving.driver.core.common.exception;
/**
 * 验证码错误异常
 *
 * @author fengshuonan
 * @date 2017-05-05 23:52
 */
public class InvalidKaptchaException extends RuntimeException {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/intercept/GunsUserFilter.java
New file
@@ -0,0 +1,105 @@
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package com.agentdriving.driver.core.intercept;
import com.agentdriving.driver.core.shiro.ShiroKit;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.AccessControlFilter;
import org.apache.shiro.web.util.WebUtils;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Filter that allows access to resources if the accessor is a known user, which is defined as
 * having a known principal.  This means that any user who is authenticated or remembered via a
 * 'remember me' feature will be allowed access from this filter.
 * <p/>
 * If the accessor is not a known user, then they will be redirected to the {@link #setLoginUrl(String) loginUrl}</p>
 *
 * @since 0.9
 */
public class GunsUserFilter extends AccessControlFilter {
    /**
     * Returns <code>true</code> if the request is a
     * {@link #isLoginRequest(javax.servlet.ServletRequest, javax.servlet.ServletResponse) loginRequest} or
     * if the current {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject}
     * is not <code>null</code>, <code>false</code> otherwise.
     *
     * @return <code>true</code> if the request is a
     * {@link #isLoginRequest(javax.servlet.ServletRequest, javax.servlet.ServletResponse) loginRequest} or
     * if the current {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject}
     * is not <code>null</code>, <code>false</code> otherwise.
     */
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
        if (isLoginRequest(request, response)) {
            return true;
        } else {
            Subject subject = getSubject(request, response);
            // If principal is not null, then the user is known and should be allowed access.
            return subject.getPrincipal() != null;
        }
    }
    /**
     * This default implementation simply calls
     * {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse) saveRequestAndRedirectToLogin}
     * and then immediately returns <code>false</code>, thereby preventing the chain from continuing so the redirect may
     * execute.
     */
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
        HttpServletRequest httpServletRequest = WebUtils.toHttp(request);
        HttpServletResponse httpServletResponse = WebUtils.toHttp(response);
        /**
         * 如果是ajax请求则不进行跳转
         */
        if (httpServletRequest.getHeader("x-requested-with") != null
                && httpServletRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
            httpServletResponse.setHeader("sessionstatus", "timeout");
            return false;
        } else {
            /**
             * 第一次点击页面
             */
            String referer = httpServletRequest.getHeader("Referer");
            if (referer == null) {
                saveRequestAndRedirectToLogin(request, response);
                return false;
            } else {
                /**
                 * 从别的页面跳转过来的
                 */
                if (ShiroKit.getSession().getAttribute("sessionFlag") == null) {
                    httpServletRequest.setAttribute("tips", "session超时");
                    httpServletRequest.getRequestDispatcher("/login").forward(request, response);
                    return false;
                } else {
                    saveRequestAndRedirectToLogin(request, response);
                    return false;
                }
            }
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/intercept/RestApiInteceptor.java
New file
@@ -0,0 +1,65 @@
package com.agentdriving.driver.core.intercept;
import com.agentdriving.driver.core.base.tips.ErrorTip;
import com.agentdriving.driver.core.common.constant.JwtConstants;
import com.agentdriving.driver.core.common.exception.BizExceptionEnum;
import com.agentdriving.driver.core.util.JwtTokenUtil;
import com.agentdriving.driver.core.util.RenderUtil;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.jsonwebtoken.JwtException;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Rest Api接口鉴权
 *
 * @author stylefeng
 * @Date 2018/7/20 23:11
 */
public class RestApiInteceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (handler instanceof org.springframework.web.servlet.resource.ResourceHttpRequestHandler) {
            return true;
        }
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        return check(request, response, handlerMethod);
    }
    private boolean check(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod) {
        if (request.getServletPath().equals(JwtConstants.AUTH_PATH)) {
            return true;
        }
        final String requestHeader = request.getHeader(JwtConstants.AUTH_HEADER);
        String authToken;
        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
            authToken = requestHeader.substring(7);
            //验证token是否过期,包含了验证jwt是否正确
            try {
                boolean flag = JwtTokenUtil.isTokenExpired(authToken);
                if (flag) {
                    RenderUtil.renderJson(response, new ErrorTip(BizExceptionEnum.TOKEN_EXPIRED.getCode(), BizExceptionEnum.TOKEN_EXPIRED.getMessage()));
                    return false;
                }
            } catch (JwtException e) {
                //有异常就是token解析失败
//                RenderUtil.renderJson(response, new ErrorTip(BizExceptionEnum.TOKEN_ERROR.getCode(), BizExceptionEnum.TOKEN_ERROR.getMessage()));
                RenderUtil.renderJson(response, ResponseWarpper.tokenErr());
                return false;
            }
        } else {
            //header没有带Bearer字段
//            RenderUtil.renderJson(response, new ErrorTip(BizExceptionEnum.TOKEN_ERROR.getCode(), BizExceptionEnum.TOKEN_ERROR.getMessage()));
            RenderUtil.renderJson(response, ResponseWarpper.tokenErr());
            return false;
        }
        return true;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/intercept/SessionHolderInterceptor.java
New file
@@ -0,0 +1,34 @@
package com.agentdriving.driver.core.intercept;
import com.agentdriving.driver.core.base.controller.BaseController;
import com.agentdriving.driver.core.util.HttpSessionHolder;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
 * 静态调用session的拦截器
 *
 * @author fengshuonan
 * @date 2016年11月13日 下午10:15:42
 */
@Aspect
@Component
public class SessionHolderInterceptor extends BaseController {
    @Pointcut("execution(* com.agentdriving.driver.*..controller.*.*(..))")
    public void cutService() {
    }
    @Around("cutService()")
    public Object sessionKit(ProceedingJoinPoint point) throws Throwable {
        HttpSessionHolder.put(super.getHttpServletRequest().getSession());
        try {
            return point.proceed();
        } finally {
            HttpSessionHolder.remove();
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/listener/ConfigListener.java
New file
@@ -0,0 +1,54 @@
/**
 * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.agentdriving.driver.core.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.HashMap;
import java.util.Map;
/**
 * ServletContext监听器
 *
 * @author stylefeng
 * @Date 2018/2/22 21:07
 */
public class ConfigListener implements ServletContextListener {
    private static Map<String, String> conf = new HashMap<>();
    public static Map<String, String> getConf() {
        return conf;
    }
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        conf.clear();
    }
    @Override
    public void contextInitialized(ServletContextEvent evt) {
        ServletContext sc = evt.getServletContext();
        //项目发布,当前运行环境的绝对路径
        conf.put("realPath", sc.getRealPath("/").replaceFirst("/", ""));
        //servletContextPath,默认""
        conf.put("contextPath", sc.getContextPath());
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/LogManager.java
New file
@@ -0,0 +1,33 @@
package com.agentdriving.driver.core.log;
import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
 * 日志管理器
 *
 * @author fengshuonan
 * @date 2017-03-30 16:29
 */
public class LogManager {
    //日志记录操作延时
    private final int OPERATE_DELAY_TIME = 10;
    //异步操作记录日志的线程池
    private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
    private LogManager() {
    }
    public static LogManager logManager = new LogManager();
    public static LogManager me() {
        return logManager;
    }
    public void executeLog(TimerTask task) {
        executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/LogObjectHolder.java
New file
@@ -0,0 +1,34 @@
package com.agentdriving.driver.core.log;
import com.agentdriving.driver.core.util.SpringContextHolder;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;
import java.io.Serializable;
/**
 * 被修改的bean临时存放的地方
 *
 * @author fengshuonan
 * @date 2017-03-31 11:19
 */
@Component
@Scope(scopeName = WebApplicationContext.SCOPE_SESSION)
public class LogObjectHolder implements Serializable{
    private Object object = null;
    public void set(Object obj) {
        this.object = obj;
    }
    public Object get() {
        return object;
    }
    public static LogObjectHolder me(){
        LogObjectHolder bean = SpringContextHolder.getBean(LogObjectHolder.class);
        return bean;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/factory/LogFactory.java
New file
@@ -0,0 +1,47 @@
package com.agentdriving.driver.core.log.factory;
import com.agentdriving.driver.core.common.constant.state.LogSucceed;
import com.agentdriving.driver.core.common.constant.state.LogType;
import com.agentdriving.driver.modular.system.model.LoginLog;
import com.agentdriving.driver.modular.system.model.OperationLog;
import java.util.Date;
/**
 * 日志对象创建工厂
 *
 * @author fengshuonan
 * @date 2016年12月6日 下午9:18:27
 */
public class LogFactory {
    /**
     * 创建操作日志
     */
    public static OperationLog createOperationLog(LogType logType, Integer userId, String bussinessName, String clazzName, String methodName, String msg, LogSucceed succeed) {
        OperationLog operationLog = new OperationLog();
        operationLog.setLogtype(logType.getMessage());
        operationLog.setLogname(bussinessName);
        operationLog.setUserid(userId);
        operationLog.setClassname(clazzName);
        operationLog.setMethod(methodName);
        operationLog.setCreatetime(new Date());
        operationLog.setSucceed(succeed.getMessage());
        operationLog.setMessage(msg);
        return operationLog;
    }
    /**
     * 创建登录日志
     */
    public static LoginLog createLoginLog(LogType logType, Integer userId, String msg, String ip) {
        LoginLog loginLog = new LoginLog();
        loginLog.setLogname(logType.getMessage());
        loginLog.setUserid(userId);
        loginLog.setCreatetime(new Date());
        loginLog.setSucceed(LogSucceed.SUCCESS.getMessage());
        loginLog.setIp(ip);
        loginLog.setMessage(msg);
        return loginLog;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/log/factory/LogTaskFactory.java
New file
@@ -0,0 +1,102 @@
package com.agentdriving.driver.core.log.factory;
import com.agentdriving.driver.core.db.Db;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.core.log.LogManager;
import com.agentdriving.driver.core.common.constant.state.LogSucceed;
import com.agentdriving.driver.core.common.constant.state.LogType;
import com.agentdriving.driver.modular.system.dao.LoginLogMapper;
import com.agentdriving.driver.modular.system.dao.OperationLogMapper;
import com.agentdriving.driver.modular.system.model.LoginLog;
import com.agentdriving.driver.modular.system.model.OperationLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.TimerTask;
/**
 * 日志操作任务创建工厂
 *
 * @author fengshuonan
 * @date 2016年12月6日 下午9:18:27
 */
public class LogTaskFactory {
    private static Logger logger = LoggerFactory.getLogger(LogManager.class);
    private static LoginLogMapper loginLogMapper = Db.getMapper(LoginLogMapper.class);
    private static OperationLogMapper operationLogMapper = Db.getMapper(OperationLogMapper.class);
    public static TimerTask loginLog(final Integer userId, final String ip) {
        return new TimerTask() {
            @Override
            public void run() {
                try {
                    LoginLog loginLog = LogFactory.createLoginLog(LogType.LOGIN, userId, null, ip);
                    loginLogMapper.insert(loginLog);
                } catch (Exception e) {
                    logger.error("创建登录日志异常!", e);
                }
            }
        };
    }
    public static TimerTask loginLog(final String username, final String msg, final String ip) {
        return new TimerTask() {
            @Override
            public void run() {
                LoginLog loginLog = LogFactory.createLoginLog(
                        LogType.LOGIN_FAIL, null, "账号:" + username + "," + msg, ip);
                try {
                    loginLogMapper.insert(loginLog);
                } catch (Exception e) {
                    logger.error("创建登录失败异常!", e);
                }
            }
        };
    }
    public static TimerTask exitLog(final Integer userId, final String ip) {
        return new TimerTask() {
            @Override
            public void run() {
                LoginLog loginLog = LogFactory.createLoginLog(LogType.EXIT, userId, null,ip);
                try {
                    loginLogMapper.insert(loginLog);
                } catch (Exception e) {
                    logger.error("创建退出日志异常!", e);
                }
            }
        };
    }
    public static TimerTask bussinessLog(final Integer userId, final String bussinessName, final String clazzName, final String methodName, final String msg) {
        return new TimerTask() {
            @Override
            public void run() {
                OperationLog operationLog = LogFactory.createOperationLog(
                        LogType.BUSSINESS, userId, bussinessName, clazzName, methodName, msg, LogSucceed.SUCCESS);
                try {
                    operationLogMapper.insert(operationLog);
                } catch (Exception e) {
                    logger.error("创建业务日志异常!", e);
                }
            }
        };
    }
    public static TimerTask exceptionLog(final Integer userId, final Exception exception) {
        return new TimerTask() {
            @Override
            public void run() {
                String msg = ToolUtil.getExceptionMsg(exception);
                OperationLog operationLog = LogFactory.createOperationLog(
                        LogType.EXCEPTION, userId, "", null, null, msg, LogSucceed.FAIL);
                try {
                    operationLogMapper.insert(operationLog);
                } catch (Exception e) {
                    logger.error("创建异常日志异常!", e);
                }
            }
        };
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/ShiroDbRealm.java
New file
@@ -0,0 +1,78 @@
package com.agentdriving.driver.core.shiro;
import com.agentdriving.driver.core.shiro.factory.IShiro;
import com.agentdriving.driver.core.shiro.factory.ShiroFactroy;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.model.User;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ShiroDbRealm extends AuthorizingRealm {
    /**
     * 登录认证
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)
            throws AuthenticationException {
        IShiro shiroFactory = ShiroFactroy.me();
        UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
        User user = shiroFactory.user(token.getUsername());
        ShiroUser shiroUser = shiroFactory.shiroUser(user);
        return shiroFactory.info(shiroUser, user, super.getName());
    }
    /**
     * 权限认证
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        IShiro shiroFactory = ShiroFactroy.me();
        ShiroUser shiroUser = (ShiroUser) principals.getPrimaryPrincipal();
        List<Integer> roleList = shiroUser.getRoleList();
        Set<String> permissionSet = new HashSet<>();
        Set<String> roleNameSet = new HashSet<>();
        for (Integer roleId : roleList) {
            List<String> permissions = shiroFactory.findPermissionsByRoleId(roleId);
            if (permissions != null) {
                for (String permission : permissions) {
                    if (ToolUtil.isNotEmpty(permission)) {
                        permissionSet.add(permission);
                    }
                }
            }
            String roleName = shiroFactory.findRoleNameByRoleId(roleId);
            roleNameSet.add(roleName);
        }
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        info.addStringPermissions(permissionSet);
        info.addRoles(roleNameSet);
        return info;
    }
    /**
     * 设置认证加密方式
     */
    @Override
    public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {
        HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
        md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
        md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
        super.setCredentialsMatcher(md5CredentialsMatcher);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/ShiroKit.java
New file
@@ -0,0 +1,290 @@
/**
 * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.agentdriving.driver.core.shiro;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.core.common.constant.Const;
import com.agentdriving.driver.core.common.constant.factory.ConstantFactory;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ByteSource;
import java.util.List;
/**
 * shiro工具类
 *
 * @author dafei, Chill Zhuang
 */
public class ShiroKit {
    private static final String NAMES_DELIMETER = ",";
    /**
     * 加盐参数
     */
    public final static String hashAlgorithmName = "MD5";
    /**
     * 循环次数
     */
    public final static int hashIterations = 1024;
    /**
     * shiro密码加密工具类
     *
     * @param credentials 密码
     * @param saltSource 密码盐
     * @return
     */
    public static String md5(String credentials, String saltSource) {
        ByteSource salt = new Md5Hash(saltSource);
        return new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations).toString();
    }
    /**
     * 获取随机盐值
     * @param length
     * @return
     */
    public static String getRandomSalt(int length) {
        return ToolUtil.getRandomString(length);
    }
    /**
     * 获取当前 Subject
     *
     * @return Subject
     */
    public static Subject getSubject() {
        return SecurityUtils.getSubject();
    }
    /**
     * 获取封装的 ShiroUser
     *
     * @return ShiroUser
     */
    public static ShiroUser getUser() {
        if (isGuest()) {
            return null;
        } else {
            return (ShiroUser) getSubject().getPrincipals().getPrimaryPrincipal();
        }
    }
    /**
     * 从shiro获取session
     *
     */
    public static Session getSession() {
        return getSubject().getSession();
    }
    /**
     * 获取shiro指定的sessionKey
     *
     */
    @SuppressWarnings("unchecked")
    public static <T> T getSessionAttr(String key) {
        Session session = getSession();
        return session != null ? (T) session.getAttribute(key) : null;
    }
    /**
     * 设置shiro指定的sessionKey
     *
     */
    public static void setSessionAttr(String key, Object value) {
        Session session = getSession();
        session.setAttribute(key, value);
    }
    /**
     * 移除shiro指定的sessionKey
     */
    public static void removeSessionAttr(String key) {
        Session session = getSession();
        if (session != null)
            session.removeAttribute(key);
    }
    /**
     * 验证当前用户是否属于该角色?,使用时与lacksRole 搭配使用
     *
     * @param roleName
     *            角色名
     * @return 属于该角色:true,否则false
     */
    public static boolean hasRole(String roleName) {
        return getSubject() != null && roleName != null
                && roleName.length() > 0 && getSubject().hasRole(roleName);
    }
    /**
     * 与hasRole标签逻辑相反,当用户不属于该角色时验证通过。
     *
     * @param roleName
     *            角色名
     * @return 不属于该角色:true,否则false
     */
    public static boolean lacksRole(String roleName) {
        return !hasRole(roleName);
    }
    /**
     * 验证当前用户是否属于以下任意一个角色。
     *
     * @param roleNames
     *            角色列表
     * @return 属于:true,否则false
     */
    public static boolean hasAnyRoles(String roleNames) {
        boolean hasAnyRole = false;
        Subject subject = getSubject();
        if (subject != null && roleNames != null && roleNames.length() > 0) {
            for (String role : roleNames.split(NAMES_DELIMETER)) {
                if (subject.hasRole(role.trim())) {
                    hasAnyRole = true;
                    break;
                }
            }
        }
        return hasAnyRole;
    }
    /**
     * 验证当前用户是否属于以下所有角色。
     *
     * @param roleNames
     *            角色列表
     * @return 属于:true,否则false
     */
    public static boolean hasAllRoles(String roleNames) {
        boolean hasAllRole = true;
        Subject subject = getSubject();
        if (subject != null && roleNames != null && roleNames.length() > 0) {
            for (String role : roleNames.split(NAMES_DELIMETER)) {
                if (!subject.hasRole(role.trim())) {
                    hasAllRole = false;
                    break;
                }
            }
        }
        return hasAllRole;
    }
    /**
     * 验证当前用户是否拥有指定权限,使用时与lacksPermission 搭配使用
     *
     * @param permission
     *            权限名
     * @return 拥有权限:true,否则false
     */
    public static boolean hasPermission(String permission) {
        return getSubject() != null && permission != null
                && permission.length() > 0
                && getSubject().isPermitted(permission);
    }
    /**
     * 与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过。
     *
     * @param permission
     *            权限名
     * @return 拥有权限:true,否则false
     */
    public static boolean lacksPermission(String permission) {
        return !hasPermission(permission);
    }
    /**
     * 已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。与notAuthenticated搭配使用
     *
     * @return 通过身份验证:true,否则false
     */
    public static boolean isAuthenticated() {
        return getSubject() != null && getSubject().isAuthenticated();
    }
    /**
     * 未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户。。
     *
     * @return 没有通过身份验证:true,否则false
     */
    public static boolean notAuthenticated() {
        return !isAuthenticated();
    }
    /**
     * 认证通过或已记住的用户。与guset搭配使用。
     *
     * @return 用户:true,否则 false
     */
    public static boolean isUser() {
        return getSubject() != null && getSubject().getPrincipal() != null;
    }
    /**
     * 验证当前用户是否为“访客”,即未认证(包含未记住)的用户。用user搭配使用
     *
     * @return 访客:true,否则false
     */
    public static boolean isGuest() {
        return !isUser();
    }
    /**
     * 输出当前用户信息,通常为登录帐号信息。
     *
     * @return 当前用户信息
     */
    public static String principal() {
        if (getSubject() != null) {
            Object principal = getSubject().getPrincipal();
            return principal.toString();
        }
        return "";
    }
    /**
     * 获取当前用户的部门数据范围的集合
     */
    public static List<Integer> getDeptDataScope() {
        Integer deptId = getUser().getDeptId();
        List<Integer> subDeptIds = ConstantFactory.me().getSubDeptId(deptId);
        subDeptIds.add(deptId);
        return subDeptIds;
    }
    /**
     * 判断当前用户是否是超级管理员
     */
    public static boolean isAdmin() {
        List<Integer> roleList = ShiroKit.getUser().getRoleList();
        for (Integer integer : roleList) {
            String singleRoleTip = ConstantFactory.me().getSingleRoleTip(integer);
            if (singleRoleTip.equals(Const.ADMIN_NAME)) {
                return true;
            }
        }
        return false;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/ShiroUser.java
New file
@@ -0,0 +1,81 @@
package com.agentdriving.driver.core.shiro;
import java.io.Serializable;
import java.util.List;
/**
 * 自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息
 *
 * @author fengshuonan
 * @date 2016年12月5日 上午10:26:43
 */
public class ShiroUser implements Serializable {
    private static final long serialVersionUID = 1L;
    public Integer id;          // 主键ID
    public String account;      // 账号
    public String name;         // 姓名
    public Integer deptId;      // 部门id
    public List<Integer> roleList; // 角色集
    public String deptName;        // 部门名称
    public List<String> roleNames; // 角色名称集
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getDeptId() {
        return deptId;
    }
    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }
    public List<Integer> getRoleList() {
        return roleList;
    }
    public void setRoleList(List<Integer> roleList) {
        this.roleList = roleList;
    }
    public String getDeptName() {
        return deptName;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    public List<String> getRoleNames() {
        return roleNames;
    }
    public void setRoleNames(List<String> roleNames) {
        this.roleNames = roleNames;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/check/ICheck.java
New file
@@ -0,0 +1,32 @@
/**
 * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.agentdriving.driver.core.shiro.check;
/**
 * 检查用接口
 */
public interface ICheck {
    /**
     * 检查当前登录用户是否拥有指定的角色访问当
     */
    boolean check(Object[] permissions);
    /**
     * 检查当前登录用户是否拥有当前请求的servlet的权限
     */
    boolean checkAll();
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/check/PermissionCheckFactory.java
New file
@@ -0,0 +1,73 @@
/**
 * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.agentdriving.driver.core.shiro.check;
import com.agentdriving.driver.core.support.CollectionKit;
import com.agentdriving.driver.core.support.HttpKit;
import com.agentdriving.driver.core.util.SpringContextHolder;
import com.agentdriving.driver.core.shiro.ShiroKit;
import com.agentdriving.driver.core.shiro.ShiroUser;
import com.agentdriving.driver.core.listener.ConfigListener;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
/**
 * 权限自定义检查
 */
@Service
@DependsOn("springContextHolder")
@Transactional(readOnly = true)
public class PermissionCheckFactory implements ICheck {
    public static ICheck me() {
        return SpringContextHolder.getBean(ICheck.class);
    }
    @Override
    public boolean check(Object[] permissions) {
        ShiroUser user = ShiroKit.getUser();
        if (null == user) {
            return false;
        }
        String join = CollectionKit.join(permissions, ",");
        if (ShiroKit.hasAnyRoles(join)) {
            return true;
        }
        return false;
    }
    @Override
    public boolean checkAll() {
        HttpServletRequest request = HttpKit.getRequest();
        ShiroUser user = ShiroKit.getUser();
        if (null == user) {
            return false;
        }
        String requestURI = request.getRequestURI().replaceFirst(ConfigListener.getConf().get("contextPath"), "");
        String[] str = requestURI.split("/");
        if (str.length > 3) {
            requestURI = "/" + str[1] + "/" + str[2];
        }
        if (ShiroKit.hasPermission(requestURI)) {
            return true;
        }
        return false;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/check/PermissionCheckManager.java
New file
@@ -0,0 +1,50 @@
/**
 * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.agentdriving.driver.core.shiro.check;
import com.agentdriving.driver.core.util.SpringContextHolder;
/**
 * 权限检查管理器(入口)
 */
public class PermissionCheckManager {
    private final static PermissionCheckManager me = new PermissionCheckManager();
    private ICheck defaultCheckFactory = SpringContextHolder.getBean(ICheck.class);
    public static PermissionCheckManager me() {
        return me;
    }
    private PermissionCheckManager() {
    }
    public PermissionCheckManager(ICheck checkFactory) {
        this.defaultCheckFactory = checkFactory;
    }
    public void setDefaultCheckFactory(ICheck defaultCheckFactory) {
        this.defaultCheckFactory = defaultCheckFactory;
    }
    public static boolean check(Object[] permissions) {
        return me.defaultCheckFactory.check(permissions);
    }
    public static boolean checkAll() {
        return me.defaultCheckFactory.checkAll();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/factory/IShiro.java
New file
@@ -0,0 +1,50 @@
package com.agentdriving.driver.core.shiro.factory;
import com.agentdriving.driver.core.shiro.ShiroUser;
import com.agentdriving.driver.modular.system.model.User;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import java.util.List;
/**
 * 定义shirorealm所需数据的接口
 *
 * @author fengshuonan
 * @date 2016年12月5日 上午10:23:34
 */
public interface IShiro {
    /**
     * 根据账号获取登录用户
     *
     * @param account 账号
     */
    User user(String account);
    /**
     * 根据系统用户获取Shiro的用户
     *
     * @param user 系统用户
     */
    ShiroUser shiroUser(User user);
    /**
     * 获取权限列表通过角色id
     *
     * @param roleId 角色id
     */
    List<String> findPermissionsByRoleId(Integer roleId);
    /**
     * 根据角色id获取角色名称
     *
     * @param roleId 角色id
     */
    String findRoleNameByRoleId(Integer roleId);
    /**
     * 获取shiro的认证信息
     */
    SimpleAuthenticationInfo info(ShiroUser shiroUser, User user, String realmName);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/shiro/factory/ShiroFactroy.java
New file
@@ -0,0 +1,98 @@
package com.agentdriving.driver.core.shiro.factory;
import com.agentdriving.driver.core.util.Convert;
import com.agentdriving.driver.core.util.SpringContextHolder;
import com.agentdriving.driver.core.shiro.ShiroUser;
import com.agentdriving.driver.core.common.constant.factory.ConstantFactory;
import com.agentdriving.driver.core.common.constant.state.ManagerStatus;
import com.agentdriving.driver.modular.system.dao.MenuMapper;
import com.agentdriving.driver.modular.system.dao.UserMapper;
import com.agentdriving.driver.modular.system.model.User;
import org.apache.shiro.authc.CredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.util.ByteSource;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
@DependsOn("springContextHolder")
@Transactional(readOnly = true)
public class ShiroFactroy implements IShiro {
    @Resource
    private UserMapper userMapper;
    @Resource
    private MenuMapper menuMapper;
    public static IShiro me() {
        return SpringContextHolder.getBean(IShiro.class);
    }
    @Override
    public User user(String account) {
        User user = userMapper.getByAccount(account);
        // 账号不存在
        if (null == user) {
            throw new CredentialsException();
        }
        // 账号被冻结
        if (user.getStatus() != ManagerStatus.OK.getCode()) {
            throw new LockedAccountException();
        }
        return user;
    }
    @Override
    public ShiroUser shiroUser(User user) {
        ShiroUser shiroUser = new ShiroUser();
        shiroUser.setId(user.getId());
        shiroUser.setAccount(user.getAccount());
        shiroUser.setDeptId(user.getDeptid());
        shiroUser.setDeptName(ConstantFactory.me().getDeptName(user.getDeptid()));
        shiroUser.setName(user.getName());
        Integer[] roleArray = Convert.toIntArray(user.getRoleid());
        List<Integer> roleList = new ArrayList<Integer>();
        List<String> roleNameList = new ArrayList<String>();
        for (int roleId : roleArray) {
            roleList.add(roleId);
            roleNameList.add(ConstantFactory.me().getSingleRoleName(roleId));
        }
        shiroUser.setRoleList(roleList);
        shiroUser.setRoleNames(roleNameList);
        return shiroUser;
    }
    @Override
    public List<String> findPermissionsByRoleId(Integer roleId) {
        return menuMapper.getResUrlsByRoleId(roleId);
    }
    @Override
    public String findRoleNameByRoleId(Integer roleId) {
        return ConstantFactory.me().getSingleRoleTip(roleId);
    }
    @Override
    public SimpleAuthenticationInfo info(ShiroUser shiroUser, User user, String realmName) {
        String credentials = user.getPassword();
        // 密码加盐处理
        String source = user.getSalt();
        ByteSource credentialsSalt = new Md5Hash(source);
        return new SimpleAuthenticationInfo(shiroUser, credentials, credentialsSalt, realmName);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/tag/DictSelectorTag.java
New file
@@ -0,0 +1,201 @@
package com.agentdriving.driver.core.tag;
import com.agentdriving.driver.core.exception.GunsException;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.core.common.exception.BizExceptionEnum;
import com.agentdriving.driver.modular.system.model.Dict;
import com.agentdriving.driver.modular.system.service.IDictService;
import org.beetl.core.Tag;
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;
/**
 * 字典标签渲染
 *
 * @author zhangjiajia
 * @Date 2018年6月4日17:33:32
 */
@Component
@Scope("prototype")
public class DictSelectorTag extends Tag {
    @Autowired
    IDictService iDictService;
    @Override
    public void render(){
        //String tagName = (String) this.args[0];
        Map attrs = (Map) args[1];
        if(ToolUtil.isEmpty(attrs.get("code"))){
            throw new GunsException(BizExceptionEnum.ERROR_CODE_EMPTY);
        }
        //字典类型编码
        String code = attrs.get("code").toString();
        //控件显示类型select 选择框,radio 单选按钮,checkbox 多选按钮
        String type = ToolUtil.isNotEmpty(attrs.get("type"))?attrs.get("type").toString():"select";
        //开启多选
        String multiple = ToolUtil.isNotEmpty(attrs.get("multiple"))?attrs.get("multiple").toString():"";
        //字典名称
        String label = ToolUtil.isNotEmpty(attrs.get("label"))?attrs.get("label").toString():"";
        //提示
        String placeholder = (ToolUtil.isNotEmpty(attrs.get("placeholder"))?attrs.get("placeholder").toString():"");
        //宽度
        String width = ToolUtil.isNotEmpty(attrs.get("width"))?attrs.get("width").toString():"248";
        //默认值
        String value = ToolUtil.isNotEmpty(attrs.get("value"))?attrs.get("value").toString():"";
        //id
        String id = ToolUtil.isNotEmpty(attrs.get("id"))?attrs.get("id").toString():"";
        //name
        String name = ToolUtil.isNotEmpty(attrs.get("name"))?attrs.get("name").toString():"";
        //分割线
        String underline = ToolUtil.isNotEmpty(attrs.get("underline"))?attrs.get("underline").toString():"";
        //onchange事件
        String onchange = ToolUtil.isNotEmpty(attrs.get("onchange"))?attrs.get("onchange").toString():"";
        //readonly属性
        String readonly = ToolUtil.isNotEmpty(attrs.get("readonly"))?attrs.get("readonly").toString():"";
        //disabled属性
        String disabled = ToolUtil.isNotEmpty(attrs.get("disabled"))?attrs.get("disabled").toString():"";
        //searchnum 下拉选项数量达到多少启用搜索,默认10
        int searchnum = ToolUtil.isNum(attrs.get("searchnum"))?Integer.parseInt(attrs.get("searchnum").toString()):10;
        //根据code查询字典数据
        List<Dict>  list = iDictService.selectByParentCode(code);
        StringBuffer html = new StringBuffer();
        html.append("<div class=\"form-group\">\r\n");
        html.append("<label class=\"col-sm-3 control-label\">"+label+"</label>\r\n");
        html.append("<div class=\"col-sm-9\">\r\n");
        //单选按钮
        if("radio".equals(type)) {
            list.forEach(obj->{
                html.append("<label class=\"radio-inline i-checks\">\r\n<input type=\"radio\" ");
                //判断控件是否禁用
                if("true".equals(disabled)||"disabled".equals(disabled)) {
                    html.append("disabled ");
                }else{
                    if(ToolUtil.isNotEmpty(name)){
                        html.append("name=\""+name+"\" ");
                    }
                }
                if("true".equals(readonly)||"disabled".equals(readonly)) {
                    html.append("disabled ");
                }
                if(ToolUtil.isNotEmpty(value)&&value.equals(obj.getCode())){
                    html.append("checked ");
                }
                html.append("value=\""+obj.getCode()+"\" >"+obj.getName()+"</label>\r\n");
            });
        //多选按钮
        }else if("checkbox".equals(type)){
            list.forEach(obj->{
                html.append("<label class=\"checkbox-inline i-checks\">\r\n<input type=\"checkbox\" ");
                //判断控件是否禁用
                if("true".equals(disabled)||"disabled".equals(disabled)) {
                    html.append("disabled ");
                }else{
                    if(ToolUtil.isNotEmpty(name)){
                        html.append("name=\""+name+"\" ");
                    }
                }
                if("true".equals(readonly)||"disabled".equals(readonly)) {
                    html.append("disabled ");
                }
                if(ToolUtil.isNotEmpty(value)&&value.equals(obj.getCode())){
                    html.append("checked ");
                }
                html.append("value=\""+obj.getCode()+"\" >"+obj.getName()+"</label>\r\n");
            });
        //默认select
        }else{
            //开启多选
            if("true".equals(multiple)){
                if(list.size()>=searchnum) {
                    html.append("<select multiple ");
                }else{
                    html.append("<select multiple=\"multiple\" size=\"10\" ");
                }
            }else{
                html.append("<select ");
            }
            //判断控件是否启用提示
            if(ToolUtil.isNotEmpty(placeholder)){
                html.append(" data-placeholder=\""+placeholder+"\" ");
            }
            //判断控件是否禁用
            if("true".equals(disabled)||"disabled".equals(disabled)) {
                html.append("disabled=\"disabled\" ");
            }else{
                //启用
                if(ToolUtil.isNotEmpty(id)){
                    html.append("id=\""+id+"\" ");
                }
                if(ToolUtil.isNotEmpty(name)){
                    html.append("name=\""+name+"\" ");
                }
            }
            //判断是否启用搜索框
            //判断下拉数据,如果查询出来的条数达到启用搜索的数量就启用
            if(list.size()>=searchnum){
                html.append("class=\"form-control chosen-select\" style=\"width:"+width+"px\"  tabindex=\"1\" \r\n");
            } else{
                html.append("class=\"form-control\" style=\"width:"+width+"px\" \r\n");
            }
            //判断控件是否只读
            if("true".equals(readonly)||"readonly".equals(readonly)) {
                if(list.size()>=searchnum) {
                    html.append("disabled=\"disabled\" ");
                }else{
                    html.append("onfocus=\"this.defaultIndex=this.selectedIndex;\" onchange=\"this.selectedIndex=this.defaultIndex;\" ");
                }
            }
            //判断是否绑定onchange事件
            if(ToolUtil.isNotEmpty(onchange)){
                html.append("onchange=\""+onchange+"($(this).children('option:selected').val())\" ");
            }
            html.append(">");
            if(ToolUtil.isNotEmpty(placeholder)){
                html.append("<option value=\"\">"+placeholder+"</option>\r\n");
            }
            //将查询出来的数据添加到select中
            list.forEach(obj->{
                if(ToolUtil.isNotEmpty(value)&&value.equals(obj.getCode())){
                    html.append("<option selected value=\""+obj.getCode()+"\">"+obj.getName()+"</option>\r\n");
                }else{
                    html.append("<option value=\""+obj.getCode()+"\">"+obj.getName()+"</option>\r\n");
                }
            });
            html.append("</select>\r\n");
        }
        html.append("</div>\r\n</div>\r\n");
        //判断是否添加分割线
        if(ToolUtil.isNotEmpty(underline) && "true".equals(underline)) {
            html.append("<div class=\"hr-line-dashed\" ></div >\r\n");
        }
        try{
            this.ctx.byteWriter.writeString(html.toString());
        }catch (IOException e){
            throw new RuntimeException("输出字典标签错误");
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/ApiMenuFilter.java
New file
@@ -0,0 +1,36 @@
package com.agentdriving.driver.core.util;
import com.agentdriving.driver.core.node.MenuNode;
import com.agentdriving.driver.core.common.constant.Const;
import com.agentdriving.driver.config.properties.GunsProperties;
import java.util.ArrayList;
import java.util.List;
/**
 * api接口文档显示过滤
 *
 * @author fengshuonan
 * @date 2017-08-17 16:55
 */
public class ApiMenuFilter extends MenuNode {
    public static List<MenuNode> build(List<MenuNode> nodes) {
        //如果关闭了接口文档,则不显示接口文档菜单
        GunsProperties gunsProperties = SpringContextHolder.getBean(GunsProperties.class);
        if (!gunsProperties.getSwaggerOpen()) {
            List<MenuNode> menuNodesCopy = new ArrayList<>();
            for (MenuNode menuNode : nodes) {
                if (Const.API_MENU_NAME.equals(menuNode.getName())) {
                    continue;
                } else {
                    menuNodesCopy.add(menuNode);
                }
            }
            nodes = menuNodesCopy;
        }
        return nodes;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/Contrast.java
New file
@@ -0,0 +1,211 @@
package com.agentdriving.driver.core.util;
import com.agentdriving.driver.core.support.StrKit;
import com.agentdriving.driver.core.common.constant.dictmap.base.AbstractDictMap;
import com.agentdriving.driver.core.common.constant.dictmap.factory.DictFieldWarpperFactory;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.Map;
/**
 * 对比两个对象的变化的工具类
 *
 * @author fengshuonan
 * @Date 2017/3/31 10:36
 */
public class Contrast {
    //记录每个修改字段的分隔符
    public static final String separator = ";;;";
    /**
     * 比较两个对象,并返回不一致的信息
     *
     * @author stylefeng
     * @Date 2017/5/9 19:34
     */
    public static String contrastObj(Object pojo1, Object pojo2) {
        String str = "";
        try {
            Class clazz = pojo1.getClass();
            Field[] fields = pojo1.getClass().getDeclaredFields();
            int i = 1;
            for (Field field : fields) {
                if ("serialVersionUID".equals(field.getName())) {
                    continue;
                }
                PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
                Method getMethod = pd.getReadMethod();
                Object o1 = getMethod.invoke(pojo1);
                Object o2 = getMethod.invoke(pojo2);
                if (o1 == null || o2 == null) {
                    continue;
                }
                if (o1 instanceof Date) {
                    o1 = DateUtil.getDay((Date) o1);
                }
                if (!o1.toString().equals(o2.toString())) {
                    if (i != 1) {
                        str += separator;
                    }
                    str += "字段名称" + field.getName() + ",旧值:" + o1 + ",新值:" + o2;
                    i++;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 比较两个对象pojo1和pojo2,并输出不一致信息
     *
     * @author stylefeng
     * @Date 2017/5/9 19:34
     */
    public static String contrastObj(Class dictClass, String key, Object pojo1, Map<String, String> pojo2) throws IllegalAccessException, InstantiationException {
        AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance();
        String str = parseMutiKey(dictMap, key, pojo2) + separator;
        try {
            Class clazz = pojo1.getClass();
            Field[] fields = pojo1.getClass().getDeclaredFields();
            int i = 1;
            for (Field field : fields) {
                if ("serialVersionUID".equals(field.getName())) {
                    continue;
                }
                PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
                Method getMethod = pd.getReadMethod();
                Object o1 = getMethod.invoke(pojo1);
                Object o2 = pojo2.get(StrKit.firstCharToLowerCase(getMethod.getName().substring(3)));
                if (o1 == null || o2 == null) {
                    continue;
                }
                if (o1 instanceof Date) {
                    o1 = DateUtil.getDay((Date) o1);
                } else if (o1 instanceof Integer) {
                    o2 = Integer.parseInt(o2.toString());
                }
                if (!o1.toString().equals(o2.toString())) {
                    if (i != 1) {
                        str += separator;
                    }
                    String fieldName = dictMap.get(field.getName());
                    String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName());
                    if (fieldWarpperMethodName != null) {
                        Object o1Warpper = DictFieldWarpperFactory.createFieldWarpper(o1, fieldWarpperMethodName);
                        Object o2Warpper = DictFieldWarpperFactory.createFieldWarpper(o2, fieldWarpperMethodName);
                        str += "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper;
                    } else {
                        str += "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2;
                    }
                    i++;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 比较两个对象pojo1和pojo2,并输出不一致信息
     *
     * @author stylefeng
     * @Date 2017/5/9 19:34
     */
    public static String contrastObjByName(Class dictClass, String key, Object pojo1, Map<String, String> pojo2) throws IllegalAccessException, InstantiationException {
        AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance();
        String str = parseMutiKey(dictMap, key, pojo2) + separator;
        try {
            Class clazz = pojo1.getClass();
            Field[] fields = pojo1.getClass().getDeclaredFields();
            int i = 1;
            for (Field field : fields) {
                if ("serialVersionUID".equals(field.getName())) {
                    continue;
                }
                String prefix = "get";
                int prefixLength = 3;
                if (field.getType().getName().equals("java.lang.Boolean")) {
                    prefix = "is";
                    prefixLength = 2;
                }
                Method getMethod = null;
                try {
                    getMethod = clazz.getDeclaredMethod(prefix + StrKit.firstCharToUpperCase(field.getName()));
                } catch (java.lang.NoSuchMethodException e) {
                    System.err.println("this className:" + clazz.getName() + " is not methodName: " + e.getMessage());
                    continue;
                }
                Object o1 = getMethod.invoke(pojo1);
                Object o2 = pojo2.get(StrKit.firstCharToLowerCase(getMethod.getName().substring(prefixLength)));
                if (o1 == null || o2 == null) {
                    continue;
                }
                if (o1 instanceof Date) {
                    o1 = DateUtil.getDay((Date) o1);
                } else if (o1 instanceof Integer) {
                    o2 = Integer.parseInt(o2.toString());
                }
                if (!o1.toString().equals(o2.toString())) {
                    if (i != 1) {
                        str += separator;
                    }
                    String fieldName = dictMap.get(field.getName());
                    String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(field.getName());
                    if (fieldWarpperMethodName != null) {
                        Object o1Warpper = DictFieldWarpperFactory.createFieldWarpper(o1, fieldWarpperMethodName);
                        Object o2Warpper = DictFieldWarpperFactory.createFieldWarpper(o2, fieldWarpperMethodName);
                        str += "字段名称:" + fieldName + ",旧值:" + o1Warpper + ",新值:" + o2Warpper;
                    } else {
                        str += "字段名称:" + fieldName + ",旧值:" + o1 + ",新值:" + o2;
                    }
                    i++;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 解析多个key(逗号隔开的)
     *
     * @author stylefeng
     * @Date 2017/5/16 22:19
     */
    public static String parseMutiKey(AbstractDictMap dictMap, String key, Map<String, String> requests) {
        StringBuilder sb = new StringBuilder();
        if (key.indexOf(",") != -1) {
            String[] keys = key.split(",");
            for (String item : keys) {
                String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(item);
                String value = requests.get(item);
                if (fieldWarpperMethodName != null) {
                    Object valueWarpper = DictFieldWarpperFactory.createFieldWarpper(value, fieldWarpperMethodName);
                    sb.append(dictMap.get(item) + "=" + valueWarpper + ",");
                } else {
                    sb.append(dictMap.get(item) + "=" + value + ",");
                }
            }
            return StrKit.removeSuffix(sb.toString(), ",");
        } else {
            String fieldWarpperMethodName = dictMap.getFieldWarpperMethodName(key);
            String value = requests.get(key);
            if (fieldWarpperMethodName != null) {
                Object valueWarpper = DictFieldWarpperFactory.createFieldWarpper(value, fieldWarpperMethodName);
                sb.append(dictMap.get(key) + "=" + valueWarpper);
            } else {
                sb.append(dictMap.get(key) + "=" + value);
            }
            return sb.toString();
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/GetMobile.java
New file
@@ -0,0 +1,87 @@
package com.agentdriving.driver.core.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class GetMobile {
    public static String getPhone(String accessToken,String androidOrIos){
        String host = "http://verifystar.market.alicloudapi.com";
        String path = "/api/v1/mobile/info";
        String method = "POST";
        String appcode = "b7d32437d08149099457dcb50fb57df2";
        Map<String, String> headers = new HashMap<String, String>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求,定义相对应的Content-Type
        headers.put("Content-Type", "application/json; charset=UTF-8");
        //需要给X-Ca-Nonce的值生成随机字符串,每次请求不能相同
        headers.put("X-Ca-Nonce", UUID.randomUUID().toString());
        Map<String, String> querys = new HashMap<String, String>();
        if(androidOrIos.equals("android")){
            querys.put("appkey", "5f02e3cc978eea07661bde20");
            querys.put("verifyId", "");
        }else{
            querys.put("appkey", "5ee43367978eea081640dca7");
            querys.put("verifyId", "");
        }
        /*;*/
        String bodys = "{\"token\":\""+accessToken+"\"}";
        try {
            /**
             * 重要提示如下:
             * HttpUtils请从
             * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
             * 下载
             *
             * 相应的依赖请参照
             * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
             */
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            System.out.println(response.toString());
            return  EntityUtils.toString(response.getEntity());
            //获取response的body
            //System.out.println(EntityUtils.toString(response.getEntity()));
        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }
       /* DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI4G9Zez9H4B36vakPXGy4", "BOVPUeZndKVbrPOq6Ef5j6oiydB3XZ");
        IAcsClient client = new DefaultAcsClient(profile);
        GetMobileRequest request = new GetMobileRequest();
        request.setRegionId("cn-hangzhou");
        request.setAccessToken(accessToken);
        try {
            GetMobileResponse response = client.getAcsResponse(request);
            才
        } catch (ServerException e) {
            e.printStackTrace();
            return  null;
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            return  null;
        }*/
    }
    public static void main(String[] args) {
        //String response = GetMobile.getPhone("eyAgIm8iIDogImlPUyIsICAiayIgOiAiY2lNVmw2S0ZyM0xlWlJOQVNSNTdZXC9WV1FZS3BCZlVSR1pQa1I5OFJFWmVJWmF3OHJGM0NVSDZQZVwvNzRPVTBSalpoZE5QT002NHl3b05yZlJkWUlrUkxVY29hdm10Rkg1ODhrNjJmXC9vdTEzalN2ZDduZDlscXFLWm5Ca2hQZzBBa09yS2M1dlwvWWY0U05lUjd4RHh6MUJoOUVYbkxnbHFEclZqVW85TXQ5XC9ieXk2SmVNVVB3UzhqRHM2N3VwUEg0SWRTNElqUUxCUXVHb1FyM1ltb1lpUnQ2R29YWlJCRzhDbndUTVBrSHM4YXNMQzRGVUpmZHcxbFlzN0srNGlyTGJSdXVacTg1NW9NMEo5b05FOExmdDZGTFpmVWVQY0d0WlwvTnhIMnFXM1ZIU3NtUEgxdHlkTzdUeGRmVUM1cEo2SmhRclVvNEdIazBXVHF3RTlCYlFnPT0iLCAgImMiIDogIkVjS0dHSzB5TjA2Tm9vSjhYV1h1K3d6eGdodElDaGpqOUtHRlliSjl4ZjhQMUR6UERsYVdRcGcxMHg5SkdNV2hcL2wyVDd4bXNxSUZmWERDZlBjZ05NdFY2dVZueEU1aGFTUUdPbFowekp4Z2JPZ3ZrR2ZkbVJvOGZFSGhEQ0czM1RYNHR5ZHJXUGFuQTBBSmo3VjljaGN0d25UT0ZzSG82WlhLOWZsQUlSbHpmNE1yaGZsRkhtTVRoejQ1UG01cHhtSlh5N3EyVlZTK0tEbU9GU2lzNlwvMnByK24zQWttazYxZ0RVUUhYV2FoVFwvYzc0dzhrTDhWYlliM3dOc0VkVEh2ZDhzYjlPbFNpVHNJUHNFUVJ6Wm9JRFJUaE5pWVg1U3VwNklQXC9LTFlLOFdaSlJWamU2QUpLT2JOakEybTlleTM0Sys2MUhtQktPNmNwTlZ4TTJITlJERjRzcG9lWStYdnhTT1pVcExaSWxXd3NFdUtUeVVBSzJUMHpOUmZBQVhlOWR6alBcL2lHSFU3aitwUWlaaU1XbHg5WGtIREM3MjNkXC80b3d2dEluem9yVlBNNjJQTzJsWWttOEt4TVVTYlRRTnBVNGZzRzlXcHB0cFJRR0JFUTYyNmxlNFFZeWdaSWxjZXlcL1VJOWlLWDVWTzhCU01VUnNoZUdNU29HejF2dmw2QUVmdTdBNm0raUhUYkxOd01uQkM3VHZ4TlYxNmd4M2dWRGtha0ZGNEdZTjZsWm0zMkNnT2hVakhlODMrUXFHNXhNNkZxUlBnMWN0QzRRN05DZFpHNUN5UEZVd2dRcUx3MFFWaE9IRnNZTFwvU3p3T1JUMFFlb0h3T1piZ3FmNU96T0k1TFwvelRqNEFJV3ZqejlteWNJZVc3cXMzXC9IdnJXck5GM3lSZCtYTml5a2d6d1RDMnZjaXRrSkszSVBENjlEVVRVVzBCNllvdng2ako5QW5xZXdUc1J3Nlp4ZXcra0xpXC9HTlB0K0hHRGVjclVZcFpwOFQ5ckN6QkM0Z0ZEa0ZOQ0Z2UkJKSE5JVGkrRGNUeWhVZz09In0=","ios");
        JSONObject json = JSONObject.parseObject("{\"success\":true,\"data\":{\"mobile\":\"15608199082\",\"score\":null,\"activeScore\":null,\"aesEncryptKey\":null},\"code\":2001,\"message\":\"gain mobile&#39;s result success\",\"requestId\":\"21D1E797-2B22-4D0E-B31D-AC470F7E06E7\"}");
        String phone = json.getJSONObject("data").getString("mobile");
        //JSONObject json = JSONObject.parseObject(response);
        if(json.getInteger("code")!=2003){
            System.out.println("1111="+ phone);
        }
        System.out.println( phone);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/HttpUtils.java
New file
@@ -0,0 +1,312 @@
package com.agentdriving.driver.core.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
public class HttpUtils {
    /**
     * get
     *
     * @param host
     * @param path
     * @param method
     * @param headers
     * @param querys
     * @return
     * @throws Exception
     */
    public static HttpResponse doGet(String host, String path, String method,
                                     Map<String, String> headers,
                                     Map<String, String> querys)
            throws Exception {
        HttpClient httpClient = wrapClient(host);
        HttpGet request = new HttpGet(buildUrl(host, path, querys));
        for (Map.Entry<String, String> e : headers.entrySet()) {
            request.addHeader(e.getKey(), e.getValue());
        }
        return httpClient.execute(request);
    }
    /**
     * post form
     *
     * @param host
     * @param path
     * @param method
     * @param headers
     * @param querys
     * @param bodys
     * @return
     * @throws Exception
     */
    public static HttpResponse doPost(String host, String path, String method,
                                      Map<String, String> headers,
                                      Map<String, String> querys,
                                      Map<String, String> bodys)
            throws Exception {
        HttpClient httpClient = wrapClient(host);
        HttpPost request = new HttpPost(buildUrl(host, path, querys));
        for (Map.Entry<String, String> e : headers.entrySet()) {
            request.addHeader(e.getKey(), e.getValue());
        }
        if (bodys != null) {
            List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
            for (String key : bodys.keySet()) {
                nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
            }
            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
            formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
            request.setEntity(formEntity);
        }
        return httpClient.execute(request);
    }
    /**
     * Post String
     *
     * @param host
     * @param path
     * @param method
     * @param headers
     * @param querys
     * @param body
     * @return
     * @throws Exception
     */
    public static HttpResponse doPost(String host, String path, String method,
                                      Map<String, String> headers,
                                      Map<String, String> querys,
                                      String body)
            throws Exception {
        HttpClient httpClient = wrapClient(host);
        HttpPost request = new HttpPost(buildUrl(host, path, querys));
        for (Map.Entry<String, String> e : headers.entrySet()) {
            request.addHeader(e.getKey(), e.getValue());
        }
        if (StringUtils.isNotBlank(body)) {
            request.setEntity(new StringEntity(body, "utf-8"));
        }
        return httpClient.execute(request);
    }
    /**
     * Post stream
     *
     * @param host
     * @param path
     * @param method
     * @param headers
     * @param querys
     * @param body
     * @return
     * @throws Exception
     */
    public static HttpResponse doPost(String host, String path, String method,
                                      Map<String, String> headers,
                                      Map<String, String> querys,
                                      byte[] body)
            throws Exception {
        HttpClient httpClient = wrapClient(host);
        HttpPost request = new HttpPost(buildUrl(host, path, querys));
        for (Map.Entry<String, String> e : headers.entrySet()) {
            request.addHeader(e.getKey(), e.getValue());
        }
        if (body != null) {
            request.setEntity(new ByteArrayEntity(body));
        }
        return httpClient.execute(request);
    }
    /**
     * Put String
     * @param host
     * @param path
     * @param method
     * @param headers
     * @param querys
     * @param body
     * @return
     * @throws Exception
     */
    public static HttpResponse doPut(String host, String path, String method,
                                     Map<String, String> headers,
                                     Map<String, String> querys,
                                     String body)
            throws Exception {
        HttpClient httpClient = wrapClient(host);
        HttpPut request = new HttpPut(buildUrl(host, path, querys));
        for (Map.Entry<String, String> e : headers.entrySet()) {
            request.addHeader(e.getKey(), e.getValue());
        }
        if (StringUtils.isNotBlank(body)) {
            request.setEntity(new StringEntity(body, "utf-8"));
        }
        return httpClient.execute(request);
    }
    /**
     * Put stream
     * @param host
     * @param path
     * @param method
     * @param headers
     * @param querys
     * @param body
     * @return
     * @throws Exception
     */
    public static HttpResponse doPut(String host, String path, String method,
                                     Map<String, String> headers,
                                     Map<String, String> querys,
                                     byte[] body)
            throws Exception {
        HttpClient httpClient = wrapClient(host);
        HttpPut request = new HttpPut(buildUrl(host, path, querys));
        for (Map.Entry<String, String> e : headers.entrySet()) {
            request.addHeader(e.getKey(), e.getValue());
        }
        if (body != null) {
            request.setEntity(new ByteArrayEntity(body));
        }
        return httpClient.execute(request);
    }
    /**
     * Delete
     *
     * @param host
     * @param path
     * @param method
     * @param headers
     * @param querys
     * @return
     * @throws Exception
     */
    public static HttpResponse doDelete(String host, String path, String method,
                                        Map<String, String> headers,
                                        Map<String, String> querys)
            throws Exception {
        HttpClient httpClient = wrapClient(host);
        HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
        for (Map.Entry<String, String> e : headers.entrySet()) {
            request.addHeader(e.getKey(), e.getValue());
        }
        return httpClient.execute(request);
    }
    private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
        StringBuilder sbUrl = new StringBuilder();
        sbUrl.append(host);
        if (!StringUtils.isBlank(path)) {
            sbUrl.append(path);
        }
        if (null != querys) {
            StringBuilder sbQuery = new StringBuilder();
            for (Map.Entry<String, String> query : querys.entrySet()) {
                if (0 < sbQuery.length()) {
                    sbQuery.append("&");
                }
                if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
                    sbQuery.append(query.getValue());
                }
                if (!StringUtils.isBlank(query.getKey())) {
                    sbQuery.append(query.getKey());
                    if (!StringUtils.isBlank(query.getValue())) {
                        sbQuery.append("=");
                        sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
                    }
                }
            }
            if (0 < sbQuery.length()) {
                sbUrl.append("?").append(sbQuery);
            }
        }
        return sbUrl.toString();
    }
    private static HttpClient wrapClient(String host) {
        HttpClient httpClient = new DefaultHttpClient();
        if (host.startsWith("https://")) {
            sslClient(httpClient);
        }
        return httpClient;
    }
    private static void sslClient(HttpClient httpClient) {
        try {
            SSLContext ctx = SSLContext.getInstance("TLS");
            X509TrustManager tm = new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                public void checkClientTrusted(X509Certificate[] xcs, String str) {
                }
                public void checkServerTrusted(X509Certificate[] xcs, String str) {
                }
            };
            ctx.init(null, new TrustManager[] { tm }, null);
            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            ClientConnectionManager ccm = httpClient.getConnectionManager();
            SchemeRegistry registry = ccm.getSchemeRegistry();
            registry.register(new Scheme("https", 443, ssf));
        } catch (KeyManagementException ex) {
            throw new RuntimeException(ex);
        } catch (NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/JwtTokenUtil.java
New file
@@ -0,0 +1,127 @@
package com.agentdriving.driver.core.util;
import com.agentdriving.driver.core.common.constant.JwtConstants;
import io.jsonwebtoken.*;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * <p>jwt token工具类</p>
 * <pre>
 *     jwt的claim里一般包含以下几种数据:
 *         1. iss -- token的发行者
 *         2. sub -- 该JWT所面向的用户
 *         3. aud -- 接收该JWT的一方
 *         4. exp -- token的失效时间
 *         5. nbf -- 在此时间段之前,不会被处理
 *         6. iat -- jwt发布时间
 *         7. jti -- jwt唯一标识,防止重复使用
 * </pre>
 *
 * @author fengshuonan
 * @Date 2017/8/25 10:59
 */
@Component
public class JwtTokenUtil {
    /**
     * 获取用户名从token中
     */
    public static String getUsernameFromToken(String token) {
        return getClaimFromToken(token).getSubject();
    }
    /**
     * 获取jwt发布时间
     */
    public static Date getIssuedAtDateFromToken(String token) {
        return getClaimFromToken(token).getIssuedAt();
    }
    /**
     * 获取jwt失效时间
     */
    public static Date getExpirationDateFromToken(String token) {
        return getClaimFromToken(token).getExpiration();
    }
    /**
     * 获取jwt接收者
     */
    public static String getAudienceFromToken(String token) {
        return getClaimFromToken(token).getAudience();
    }
    /**
     * 获取私有的jwt claim
     */
    public static String getPrivateClaimFromToken(String token, String key) {
        return getClaimFromToken(token).get(key).toString();
    }
    /**
     * 获取jwt的payload部分
     */
    public static Claims getClaimFromToken(String token) {
        return Jwts.parser()
                .setSigningKey(JwtConstants.SECRET)
                .parseClaimsJws(token)
                .getBody();
    }
    /**
     * 解析token是否正确,不正确会报异常<br>
     */
    public static void parseToken(String token) throws JwtException {
        Jwts.parser().setSigningKey(JwtConstants.SECRET).parseClaimsJws(token).getBody();
    }
    /**
     * <pre>
     *  验证token是否失效
     *  true:过期   false:没过期
     * </pre>
     */
    public static Boolean isTokenExpired(String token) {
        try {
            final Date expiration = getExpirationDateFromToken(token);
            return expiration.before(new Date());
        } catch (ExpiredJwtException expiredJwtException) {
            return true;
        }
    }
    /**
     * 生成token(通过用户名和签名时候用的随机数)
     */
    public static String generateToken(String userId) {
        Map<String, Object> claims = new HashMap<>();
        return doGenerateToken(claims, userId);
    }
    /**
     * 生成token
     */
    private static String doGenerateToken(Map<String, Object> claims, String subject) {
        final Date createdDate = new Date();
        final Date expirationDate = new Date(createdDate.getTime() + JwtConstants.EXPIRATION * 1000);
        return Jwts.builder()
                .setClaims(claims)
                .setSubject(subject)
                .setIssuedAt(createdDate)
                .setExpiration(expirationDate)
                .signWith(SignatureAlgorithm.HS512, JwtConstants.SECRET)
                .compact();
    }
    /**
     * 获取混淆MD5签名用的随机字符串
     */
    public static String getRandomKey() {
        return ToolUtil.getRandomString(6);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/core/util/KaptchaUtil.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.core.util;
import com.agentdriving.driver.config.properties.GunsProperties;
/**
 * 验证码工具类
 */
public class KaptchaUtil {
    /**
     * 获取验证码开关
     */
    public static Boolean getKaptchaOnOff() {
        return SpringContextHolder.getBean(GunsProperties.class).getKaptchaOpen();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/code/controller/CodeController.java
New file
@@ -0,0 +1,61 @@
package com.agentdriving.driver.modular.code.controller;
import com.agentdriving.driver.core.base.controller.BaseController;
import com.agentdriving.driver.core.config.properties.DruidProperties;
import com.agentdriving.driver.generator.action.config.WebGeneratorConfig;
import com.agentdriving.driver.generator.action.model.GenQo;
import com.agentdriving.driver.modular.code.factory.DefaultTemplateFactory;
import com.agentdriving.driver.modular.code.service.TableService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * 代码生成控制器
 *
 * @author fengshuonan
 * @Date 2017年11月30日16:39:19
 */
@Controller
@RequestMapping("/code")
public class CodeController extends BaseController {
    private static String PREFIX = "/code";
    @Autowired
    private TableService tableService;
    @Autowired
    private DruidProperties druidProperties;
    /**
     * 跳转到代码生成主页
     */
    @RequestMapping("")
    public String blackboard(Model model) {
        model.addAttribute("tables", tableService.getAllTables());
        model.addAttribute("params", DefaultTemplateFactory.getDefaultParams());
        model.addAttribute("templates", DefaultTemplateFactory.getDefaultTemplates());
        return PREFIX + "/code.html";
    }
    /**
     * 生成代码
     */
    @ApiOperation("生成代码")
    @RequestMapping(value = "/generate", method = RequestMethod.POST)
    @ResponseBody
    public Object generate(GenQo genQo) {
        genQo.setUrl(druidProperties.getUrl());
        genQo.setUserName(druidProperties.getUsername());
        genQo.setPassword(druidProperties.getPassword());
        WebGeneratorConfig webGeneratorConfig = new WebGeneratorConfig(genQo);
        webGeneratorConfig.doMpGeneration();
        webGeneratorConfig.doGunsGeneration();
        return SUCCESS_TIP;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/code/factory/DefaultTemplateFactory.java
New file
@@ -0,0 +1,61 @@
package com.agentdriving.driver.modular.code.factory;
import com.agentdriving.driver.GunsApplication;
import com.agentdriving.driver.core.CoreFlag;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.generator.action.model.GenQo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 模板种类构建器
 *
 * @author fengshuonan
 * @date 2017-12-04-下午2:59
 */
public class DefaultTemplateFactory {
    /**
     * 获取所有的模板种类
     */
    public static List<Map<String,Object>> getDefaultTemplates(){
        ArrayList<Map<String, Object>> templates = new ArrayList<>();
        templates.add(create("controllerSwitch","controller-控制器模板"));
        templates.add(create("entitySwitch","entity-实体模板"));
        templates.add(create("serviceSwitch","service-service模板"));
        templates.add(create("daoSwitch","dao-dao模板"));
        templates.add(create("indexPageSwitch","indexPage-首页模板"));
        templates.add(create("addPageSwitch","addPage-添加页面模板"));
        templates.add(create("editPageSwitch","editPage-编辑页面模板"));
        templates.add(create("jsSwitch","indexJs-主页js模板"));
        templates.add(create("infoJsSwitch","infoJs-详情页js模板"));
        templates.add(create("sqlSwitch","sql-sql语句模板"));
        return templates;
    }
    /**
     * 获取默认的参数
     */
    public static GenQo getDefaultParams(){
        GenQo genQo = new GenQo();
        genQo.setProjectPath(ToolUtil.getWebRootPath(null));
        genQo.setAuthor("stylefeng");
        genQo.setProjectPackage(GunsApplication.class.getPackage().getName());
        genQo.setCorePackage(CoreFlag.class.getPackage().getName());
        genQo.setIgnoreTabelPrefix("sys_");
        genQo.setModuleName("system");
        genQo.setParentMenuName("系统管理");
        return genQo;
    }
    private static Map<String,Object> create(String key,String desc){
        HashMap<String, Object> template = new HashMap<>();
        template.put("key",key);
        template.put("desc",desc);
        return template;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/code/service/TableService.java
New file
@@ -0,0 +1,29 @@
package com.agentdriving.driver.modular.code.service;
import com.baomidou.mybatisplus.mapper.SqlRunner;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * 获取数据库所有的表
 *
 * @author fengshuonan
 * @date 2017-12-04-下午1:37
 */
@Service
public class TableService {
    @Value("${spring.datasource.db-name}")
    private String dbName;
    /**
     * 获取当前数据库所有的表信息
     */
    public List<Map<String, Object>> getAllTables() {
        String sql = "select TABLE_NAME as tableName,TABLE_COMMENT as tableComment from information_schema.`TABLES` where TABLE_SCHEMA = '" + dbName + "'";
        return SqlRunner.db().selectList(sql);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/CommercialController.java
New file
@@ -0,0 +1,64 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.service.ICommercialService;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.CommercialWarpper;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.util.List;
/**
 * 广告控制器
 */
@RestController
@RequestMapping()
public class CommercialController {
    @Autowired
    private ICommercialService commercialService;
    @Autowired
    private IDriverService driverService;
    @ResponseBody
    @PostMapping("/api/commercial/queryCommercialList")
//    @ServiceLog(name = "获取广告列表", url = "/api/driver/queryCommercialList")
    @ApiOperation(value = "获取广告列表", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "广告类型(1=弹窗广告,2=底部广告)", name = "type", required = true, dataType = "int"),
            @ApiImplicitParam(value = "设备类型(1=小程序,2=司机端)", name = "device", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<CommercialWarpper>> queryCommercialList(Integer type, Integer device){
        if(ToolUtil.isEmpty(type)){
            return ResponseWarpper.success(ResultUtil.paranErr("type"));
        }
        if(ToolUtil.isEmpty(device)){
            return ResponseWarpper.success(ResultUtil.paranErr("device"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<CommercialWarpper> commercialWarppers = commercialService.queryCommercialList(uid, type, device);
            return ResponseWarpper.success(commercialWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java
New file
@@ -0,0 +1,994 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.warpper.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.agentdriving.driver.modular.system.model.Driver;
import com.agentdriving.driver.modular.system.model.DriverBank;
import com.agentdriving.driver.modular.system.model.Edition;
import com.agentdriving.driver.modular.system.model.JoiningRequirements;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.PayMoneyUtil;
import com.agentdriving.driver.modular.system.util.huawei.OBSUtil;
import com.agentdriving.driver.modular.system.util.huawei.SMSUtil;
import com.agentdriving.driver.modular.system.warpper.*;
import com.agentdriving.driver.modular.system.util.RedisUtil;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.util.UUIDUtil;
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.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 org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 司机控制器
* @author pzb
* @Date 2023/2/3 14:10
*/
@RestController
@RequestMapping("")
public class DriverController {
    @Autowired
    private IBranchOfficeService branchOfficeService;
    @Autowired
    private IDriverService driverService;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private IJoiningRequirementsService joiningRequirementsService;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
    @Autowired
    private IYouTuiDriverService youTuiDriverService;
    @Autowired
    private IRevenueService revenueService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private ICashWithdrawalService cashWithdrawalService;
    @Autowired
    private ISystemConfigService systemConfigService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IEditionService editionService;
    @Autowired
    private IDriverBankService driverBankService;
    @Autowired
    private IAgentService agentService;
    @ResponseBody
    @PostMapping("/base/driver/queryCityList")
//    @ServiceLog(name = "获取开通的省市数据", url = "/base/driver/queryCityList")
    @ApiOperation(value = "获取开通的省市数据", tags = {"司机端-登录注册"}, notes = "")
    @ApiImplicitParams({
    })
    public ResponseWarpper<List<OpenCityWarpper>> queryCityList(){
        try {
            List<OpenCityWarpper> list = agentService.queryOpenCity();
            return ResponseWarpper.success(list);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/queryOpenDistrict")
//    @ServiceLog(name = "根据城市code获取开通区域", url = "/base/driver/queryOpenDistrict")
    @ApiOperation(value = "根据城市code获取开通区域", tags = {"司机端-登录注册"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "城市code", name = "cityCode", required = true, dataType = "string"),
    })
    public ResponseWarpper<List<OpenCityWarpper>> queryOpenDistrict(String cityCode){
        if(ToolUtil.isEmpty(cityCode)){
            return ResponseWarpper.success(ResultUtil.paranErr("cityCode"));
        }
        try {
            List<OpenCityWarpper> list = branchOfficeService.queryOpenDistrict(cityCode);
            return ResponseWarpper.success(list);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/driverRegister")
//    @ServiceLog(name = "司机注册申请", url = "/base/driver/driverRegister")
    @ApiOperation(value = "司机注册申请", tags = {"司机端-登录注册"}, notes = "")
    @ApiImplicitParams({
    })
    public ResponseWarpper driverRegister(DriverRegisterWarpper driverRegisterWarpper){
        try {
            ResultUtil resultUtil = driverService.driverRegister(driverRegisterWarpper);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/getVerificationCode")
//    @ServiceLog(name = "获取短信验证码", url = "/base/driver/getVerificationCode")
    @ApiOperation(value = "获取短信验证码", tags = {"司机端-登录注册"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "国家代码+86", name = "receiver", required = true, dataType = "string"),
            @ApiImplicitParam(value = "电话号码", name = "phone", required = true, dataType = "string"),
            @ApiImplicitParam(value = "1=登录,2=注册", name = "type", required = true, dataType = "int"),
    })
    public ResponseWarpper getVerificationCode(String receiver, String phone, Integer type){
        if(ToolUtil.isEmpty(receiver)){
            return ResponseWarpper.success(ResultUtil.paranErr("receiver"));
        }
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("phone"));
        }
        try {
            if(type == 1){
                Driver driver = driverService.selectOne(new EntityWrapper<Driver>().eq("phone", phone).ne("status", 3));
                if(null == driver){
                    return ResponseWarpper.success(ResultUtil.error("账号未注册"));
                }
                if(driver.getApprovalStatus() == 1){
                    return ResponseWarpper.success(ResultUtil.error("账号正在审核中"));
                }
                if(driver.getApprovalStatus() == 3){
                    return ResponseWarpper.success(ResultUtil.error("账号审核未通过"));
                }
                if(driver.getStatus() == 2){
                    return ResponseWarpper.success(ResultUtil.error("账号已冻结"));
                }
            }
            String numberRandom = UUIDUtil.getNumberRandom(5);
            SMSUtil.send(phone, "1d0f0cbe5b214b0d8efa891730eb532a", "[\"" + numberRandom + "\"]");
            redisUtil.setStrValue(receiver + phone, numberRandom, 300);//5分钟有效期
            return ResponseWarpper.success(ResultUtil.success());
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/driverCodeLogin")
//    @ServiceLog(name = "司机短信验证码登录", url = "/base/driver/driverCodeLogin")
    @ApiOperation(value = "司机短信验证码登录", tags = {"司机端-登录注册"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "国家代码+86", name = "receiver", required = true, dataType = "string"),
            @ApiImplicitParam(value = "电话号码", name = "phone", required = true, dataType = "string"),
            @ApiImplicitParam(value = "短信验证码", name = "code", required = true, dataType = "string"),
    })
    public ResponseWarpper<TokenWarpper> driverCodeLogin(String receiver, String phone, String code){
        if(ToolUtil.isEmpty(receiver)){
            return ResponseWarpper.success(ResultUtil.paranErr("receiver"));
        }
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("phone"));
        }
        try {
            ResultUtil<TokenWarpper> tokenWarpper = driverService.driverLogin(receiver, phone, code);
            return ResponseWarpper.success(tokenWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/driverPassLogin")
//    @ServiceLog(name = "司机密码登录", url = "/base/driver/driverPassLogin")
    @ApiOperation(value = "司机密码登录", tags = {"司机端-登录注册"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "国家代码+86", name = "receiver", required = true, dataType = "string"),
            @ApiImplicitParam(value = "电话号码", name = "phone", required = true, dataType = "string"),
            @ApiImplicitParam(value = "密码", name = "password", required = true, dataType = "string"),
    })
    public ResponseWarpper<TokenWarpper> driverPassLogin(String receiver, String phone, String password){
        if(ToolUtil.isEmpty(receiver)){
            return ResponseWarpper.success(ResultUtil.paranErr("receiver"));
        }
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("phone"));
        }
        if(ToolUtil.isEmpty(password)){
            return ResponseWarpper.success(ResultUtil.paranErr("password"));
        }
        try {
            ResultUtil<TokenWarpper> tokenWarpper = driverService.driverPassLogin(receiver, phone, password);
            return ResponseWarpper.success(tokenWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
//    @ResponseBody
//    @PostMapping("/api/driver/flushedToken")
//    @ServiceLog(name = "刷新token", url = "/api/driver/flushedToken")
//    @ApiOperation(value = "刷新token", tags = {"司机端-登录注册"}, notes = "")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
//    })
//    public ResponseWarpper<TokenWarpper> flushedToken(){
//        try {
//            Integer uid = driverService.getUserByRequest();
//            if(null == uid){
//                return ResponseWarpper.tokenErr();
//            }
//            ResultUtil<TokenWarpper> tokenWarpper = driverService.flushedToken(uid);
//            return ResponseWarpper.success(tokenWarpper);
//        }catch (Exception e){
//            e.printStackTrace();
//            return new ResponseWarpper(500, e.getMessage());
//        }
//    }
    @ResponseBody
    @PostMapping("/api/driver/setPassword")
//    @ServiceLog(name = "司机设置密码", url = "/api/driver/setPassword")
    @ApiOperation(value = "司机设置密码", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "密码", name = "password", required = true, dataType = "string"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper setPassword(String password){
        if(ToolUtil.isEmpty(password)){
            return ResponseWarpper.success(ResultUtil.paranErr("password"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            driverService.setPassword(uid, password);
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryDriverPosition")
//    @ServiceLog(name = "获取5公里范围内的司机", url = "/api/driver/queryDriverPosition")
    @ApiOperation(value = "获取5公里范围内的司机", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<String>> queryDriverPosition(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil<List<String>> listResultUtil = driverService.queryDriverPosition(uid);
            return ResponseWarpper.success(listResultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/addDriverPosition")
//    @ServiceLog(name = "存储司机实时位置", url = "/base/driver/addDriverPosition")
    public ResponseWarpper addDriverPosition(DriverPositionWarpper driverPositionWarpper) {
        try {
            driverService.addDriverPosition(driverPositionWarpper);
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryPromotionQRCode")
//    @ServiceLog(name = "获取司机推广二维码", url = "/api/driver/queryPromotionQRCode")
    @ApiOperation(value = "获取司机推广二维码", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<PromotionWarpper> queryPromotionQRCode() {
        try {
            Integer uid = driverService.getUserByRequest();
            if (null == uid) {
                return ResponseWarpper.tokenErr();
            }
            PromotionWarpper promotionWarpper = driverService.queryPromotionQRCode(uid);
            return ResponseWarpper.success(promotionWarpper);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/queryJoiningRequirements")
//    @ServiceLog(name = "获取加盟要求", url = "/base/driver/queryJoiningRequirements")
    @ApiOperation(value = "获取加盟要求", tags = {"司机端-登录注册"}, notes = "")
    @ApiImplicitParams({
    })
    public ResponseWarpper<List<String>> queryJoiningRequirements(){
        try {
            List<JoiningRequirements> joiningRequirements = joiningRequirementsService.selectList(new EntityWrapper<JoiningRequirements>().eq("status", 1).orderBy("sort"));
            List<String> collect = joiningRequirements.stream().map(JoiningRequirements::getContent).collect(Collectors.toList());
            return ResponseWarpper.success(collect);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryDriverInfo")
//    @ServiceLog(name = "获取司机个人信息", url = "/api/driver/queryDriverInfo")
    @ApiOperation(value = "获取司机个人信息", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<DriverInfoWarpper> queryDriverInfo(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            DriverInfoWarpper driverInfo = driverService.queryDriverInfo(uid);
            return ResponseWarpper.success(driverInfo);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/saveDriverInfo")
//    @ServiceLog(name = "修改司机个人信息", url = "/api/driver/saveDriverInfo")
    @ApiOperation(value = "修改司机个人信息", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper saveDriverInfo(DriverInfo driverInfo){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverService.saveDriverInfo(uid, driverInfo);
            return ResponseWarpper.success(resultUtil);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryDriverIntegralIncomeAndExpenses")
//    @ServiceLog(name = "获取积分收支明细", url = "/api/driver/queryDriverIntegralIncomeAndExpenses")
    @ApiOperation(value = "获取积分收支明细", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "类型(1=获取,2=消耗)", name = "type", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<IntegralIncomeAndExpensesWarpper>> queryDriverIntegralIncomeAndExpenses(Integer type, Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<IntegralIncomeAndExpensesWarpper> integralIncomeAndExpensesWarppers = accountChangeDetailService.queryDriverIntegralIncomeAndExpenses(uid, type, pageNum, pageSize);
            return ResponseWarpper.success(integralIncomeAndExpensesWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryDriverYouTuiList")
//    @ServiceLog(name = "获取积分兑换记录", url = "/api/driver/queryDriverYouTuiList")
    @ApiOperation(value = "获取积分兑换记录", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<DriverYouTuiWarpper>> queryDriverYouTuiList(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<DriverYouTuiWarpper> driverYouTuiWarppers = youTuiDriverService.queryDriverYouTuiList1(uid);
            return ResponseWarpper.success(driverYouTuiWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryCommissionList")
//    @ServiceLog(name = "获取佣金记录", url = "/api/driver/queryCommissionList")
    @ApiOperation(value = "获取佣金记录", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "日期", name = "time", required = true, dataType = "string"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<CommissionListWarpper>> queryCommissionList(String time, Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<CommissionListWarpper> list = revenueService.queryCommissionList(uid, time, pageNum, pageSize);
            return ResponseWarpper.success(list);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryInviteList")
//    @ServiceLog(name = "获取司机邀请列表", url = "/api/driver/queryInviteList")
    @ApiOperation(value = "获取司机邀请列表", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "日期", name = "time", required = true, dataType = "string"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<InviteListWarpper>> queryInviteList(String time, Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<InviteListWarpper> inviteListWarppers = orderService.queryInviteList(uid, time, pageNum, pageSize);
            return ResponseWarpper.success(inviteListWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryCommissionDetail")
//    @ServiceLog(name = "获取司机佣金明细", url = "/api/driver/queryCommissionDetail")
    @ApiOperation(value = "获取司机佣金明细", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "日期", name = "time", required = true, dataType = "string"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<CommissionDetailListWarpper> queryCommissionDetail(String time, Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            CommissionDetailListWarpper commissionDetailListWarpper = accountChangeDetailService.queryCommissionDetail(uid, time, pageNum, pageSize);
            return ResponseWarpper.success(commissionDetailListWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/withdrawCash")
//    @ServiceLog(name = "司机提现操作", url = "/api/driver/withdrawCash")
    @ApiOperation(value = "司机提现操作", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "类型(1=余额提现,2=佣金提现)", name = "type", required = true, dataType = "int"),
            @ApiImplicitParam(value = "提现金额", name = "money", required = true, dataType = "double"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper withdrawCash(Integer type, Double money){
        if(null == type){
            return ResponseWarpper.success(ResultUtil.paranErr("type"));
        }
        if(null == money){
            return ResponseWarpper.success(ResultUtil.paranErr("money"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = cashWithdrawalService.withdrawCash(uid, type, money);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryBalanceDetail")
//    @ServiceLog(name = "获取司机钱包明细", url = "/api/driver/queryBalanceDetail")
    @ApiOperation(value = "获取司机钱包明细", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "日期", name = "time", required = true, dataType = "string"),
            @ApiImplicitParam(value = "类型(1=收入,3=充值,4=支出,7=优惠券,8=保险)", name = "type", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<BalanceDetailWarpper>> queryBalanceDetail(String time, Integer type, Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<BalanceDetailWarpper> balanceDetailWarppers = accountChangeDetailService.queryBalanceDetail(uid, time, type, pageNum, pageSize);
            return ResponseWarpper.success(balanceDetailWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/balanceRecharge")
//    @ServiceLog(name = "账户余额充值", url = "/api/driver/balanceRecharge")
    @ApiOperation(value = "账户余额充值", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "充值金额", name = "amount", required = true, dataType = "double"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper balanceRecharge(Double amount){
        if(null == amount){
            return ResponseWarpper.success(ResultUtil.paranErr("amount"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverService.balanceRecharge(uid, amount);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    /**
     * 账户余额充值支付回调
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/driver/balanceRechargeCallback")
    public void balanceRechargeCallback(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");
                String orderId = out_trade_no.substring(17);
                driverService.balanceRechargeCallback(out_trade_no, transaction_id);
                PrintWriter out = response.getWriter();
                out.print(result);
                out.flush();
                out.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryPerformanceSummary")
//    @ServiceLog(name = "获取业绩排行", url = "/api/driver/queryPerformanceSummary")
    @ApiOperation(value = "获取业绩排行", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "数据类型(1=订单量,2=佣金,3=收入)", name = "type", required = true, dataType = "int"),
            @ApiImplicitParam(value = "统计时间", name = "time", required = true, dataType = "String"),
            @ApiImplicitParam(value = "统计时间类型(1=日,2=月,3=年)", name = "dayType", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<PerformanceSummaryWarpper> queryPerformanceSummary(Integer type, String time, Integer dayType){
        if(null == type){
            return ResponseWarpper.success(ResultUtil.paranErr("type"));
        }
        if(ToolUtil.isEmpty(time)){
            return ResponseWarpper.success(ResultUtil.paranErr("time"));
        }
        if(null == dayType){
            return ResponseWarpper.success(ResultUtil.paranErr("dayType"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            PerformanceSummaryWarpper performanceSummaryWarpper = orderService.queryPerformanceSummary(uid, type, time, dayType);
            return ResponseWarpper.success(performanceSummaryWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryMyAchievement")
//    @ServiceLog(name = "获取我的业绩", url = "/api/driver/queryMyAchievement")
    @ApiOperation(value = "获取我的业绩", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "统计时间", name = "time", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<MyAchievementWarpper>> queryMyAchievement(String time){
        if(ToolUtil.isEmpty(time)){
            return ResponseWarpper.success(ResultUtil.paranErr("time"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<MyAchievementWarpper> list = orderService.queryMyAchievement(uid, time);
            return ResponseWarpper.success(list);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/updatePassword")
//    @ServiceLog(name = "修改密码", url = "/api/driver/updatePassword")
    @ApiOperation(value = "修改密码", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "原密码", name = "oldPass", required = true, dataType = "String"),
            @ApiImplicitParam(value = "新密码", name = "newPass", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper updatePassword(String oldPass, String newPass){
        if(ToolUtil.isEmpty(oldPass)){
            return ResponseWarpper.success(ResultUtil.paranErr("oldPass"));
        }
        if(ToolUtil.isEmpty(newPass)){
            return ResponseWarpper.success(ResultUtil.paranErr("newPass"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverService.updatePassword(uid, oldPass, newPass);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/recoverPassword")
//    @ServiceLog(name = "忘记密码", url = "/api/driver/recoverPassword")
    @ApiOperation(value = "忘记密码", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "密码", name = "password", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper recoverPassword(String password){
        if(ToolUtil.isEmpty(password)){
            return ResponseWarpper.success(ResultUtil.paranErr("password"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverService.recoverPassword(uid, password);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/verifySMSCode")
//    @ServiceLog(name = "验证短信验证码", url = "/base/driver/verifySMSCode")
    @ApiOperation(value = "验证短信验证码", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "电话号码", name = "phone", required = true, dataType = "String"),
            @ApiImplicitParam(value = "验证码", name = "code", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper verifySMSCode(String phone, String code){
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("phone"));
        }
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("code"));
        }
        try {
            if("12345".equals(code)){
                return ResponseWarpper.success();
            }
            ResultUtil resultUtil = ResultUtil.success();
            phone = phone.indexOf("+86") < 0 ? "+86" + phone : phone;
            String value = redisUtil.getValue(phone);
            if(ToolUtil.isEmpty(value) || !value.equals(code)){
                resultUtil = ResultUtil.error("验证码无效");
            }
            redisUtil.remove(phone);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryNewVersion")
//    @ServiceLog(name = "获取最新版本", url = "/api/driver/queryNewVersion")
    @ApiOperation(value = "获取最新版本", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<EditionWarpper> queryNewVersion(){
        try {
            Edition edition = editionService.selectOne(new EntityWrapper<Edition>().eq("editionPort", 2).eq("status", 1).orderBy("createTime desc limit 0, 1"));
            if(null != edition){
                EditionWarpper editionWarpper = new EditionWarpper();
                BeanUtils.copyProperties(edition, editionWarpper);
                return ResponseWarpper.success(editionWarpper);
            }
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/driver/uploadImg")
//    @ServiceLog(name = "上传头像图片", url = "/base/driver/uploadImg")
    @ApiOperation(value = "上传头像图片", tags = {"司机端-公共接口"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "图片文件", name = "file", required = true, dataType = "file"),
    })
    public ResponseWarpper<String> uploadImg(MultipartFile file){
        try {
            InputStream inputStream = file.getInputStream();
            String name = file.getOriginalFilename();
            name = UUIDUtil.getRandomCode() + name.substring(name.lastIndexOf("."));
            String s = OBSUtil.putObjectToBucket(inputStream, name);
            return ResponseWarpper.success(s);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/microenterprise")
//    @ServiceLog(name = "绑定商户", url = "/api/driver/microenterprise")
    @ApiOperation(value = "绑定商户", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "姓名", name = "name", required = true, dataType = "String"),
            @ApiImplicitParam(value = "身份证号码", name = "IDCode", required = true, dataType = "String"),
            @ApiImplicitParam(value = "手机号", name = "phone", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper microenterprise(String name, String IDCode, String phone){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverService.microenterprise(uid, name, IDCode, phone);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/queryBank")
//    @ServiceLog(name = "获取绑定的银行卡", url = "/api/driver/queryBank")
    @ApiOperation(value = "获取绑定的银行卡", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<DriverBank> queryBank(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            DriverBank driverId = driverBankService.selectOne(new EntityWrapper<DriverBank>().eq("driverId", uid));
            return ResponseWarpper.success(driverId);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/addDriverBank")
//    @ServiceLog(name = "绑定银行卡", url = "/api/driver/addDriverBank")
    @ApiOperation(value = "绑定银行卡", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "姓名", name = "name", required = true, dataType = "String"),
            @ApiImplicitParam(value = "身份证号码", name = "IDCode", required = true, dataType = "String"),
            @ApiImplicitParam(value = "手机号", name = "phone", required = true, dataType = "String"),
            @ApiImplicitParam(value = "银行卡号", name = "bankNumber", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper addDriverBank(String name, String phone, String IDCode, String bankNumber){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverBankService.addDriverBank(uid, name, phone, IDCode, bankNumber);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/driver/delDriverBank")
//    @ServiceLog(name = "解绑银行卡", url = "/api/driver/delDriverBank")
    @ApiOperation(value = "解绑银行卡", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "银行卡id", name = "id", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper delDriverBank(Integer id){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverBankService.delDriverBank(uid, id);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverWorkController.java
New file
@@ -0,0 +1,81 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.service.IDriverWorkService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* 司机上下班控制器
* @author pzb
* @Date 2023/2/15 15:39
*/
@RestController
@RequestMapping("")
public class DriverWorkController {
    @Autowired
    private IDriverService driverService;
    @Autowired
    private IDriverWorkService driverWorkService;
    @ResponseBody
    @PostMapping("/api/home/driverWork")
//    @ServiceLog(name = "司机上班操作", url = "/api/home/driverWork")
    @ApiOperation(value = "司机上班操作", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper driverWork(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverWorkService.driverWork(uid);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/home/driverOffWork")
//    @ServiceLog(name = "司机下班操作", url = "/api/home/driverOffWork")
    @ApiOperation(value = "司机下班操作", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper driverOffWork(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverWorkService.driverOffWork(uid, 0L);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/HtmlController.java
New file
@@ -0,0 +1,49 @@
package com.agentdriving.driver.modular.system.api;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.agentdriving.driver.modular.system.model.Html;
import com.agentdriving.driver.modular.system.service.IHtmlService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
 * 协议控制器
 */
@RestController
@RequestMapping("")
public class HtmlController {
    @Autowired
    private IHtmlService htmlService;
    @ResponseBody
    @PostMapping("/base/html/queryHtml")
//    @ServiceLog(name = "获取各种协议和说明", url = "/base/html/queryHtml")
    @ApiOperation(value = "获取各种协议和说明", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "类型(1=代驾服务协议与隐私政策保护,2=法律条款,3=个人信息处理规则,4=积分说明,5=佣金规则说明,6=行程录音说明,7=预估价格说明,8=加盟基本要求,9=加盟流程,10=起步价说明,11=注销协议,12=关于我们,13=司机消单说明)", name = "type", required = true, dataType = "int"),
    })
    public ResponseWarpper<String> queryHtml(Integer type){
        if(null == type){
            return ResponseWarpper.success(ResultUtil.paranErr("type"));
        }
        try {
            Html html = htmlService.selectOne(new EntityWrapper<Html>().eq("type", type));
            return ResponseWarpper.success(null == html ? "" : html.getHtml());
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/ImgController.java
New file
@@ -0,0 +1,68 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.core.util.ToolUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.agentdriving.driver.modular.system.model.Img;
import com.agentdriving.driver.modular.system.model.SystemConfig;
import com.agentdriving.driver.modular.system.service.IImgService;
import com.agentdriving.driver.modular.system.service.ISystemConfigService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.BaseWarpper;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("")
public class ImgController {
    @Autowired
    private IImgService imgService;
    @Autowired
    private ISystemConfigService systemConfigService;
    @ResponseBody
    @PostMapping("/base/img/querySysImg")
//    @ServiceLog(name = "获取系统图片", url = "/base/img/querySysImg")
    @ApiOperation(value = "获取系统图片", tags = {"司机端-公共接口"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "数据类型(1=启动页)", name = "type", required = true, dataType = "int"),
    })
    public ResponseWarpper<List<BaseWarpper>> querySysImg(@RequestParam("type") Integer type){
        if(ToolUtil.isEmpty(type)){
            return ResponseWarpper.success(ResultUtil.paranErr("type"));
        }
        try {
            List<BaseWarpper> list = new ArrayList<>();
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8));
            if(null != systemConfig) {
                JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent());
                Integer num2 = jsonObject1.getInteger("num2");//启动页开关
                if(1 == num2){
                    List<Img> imgs = imgService.selectList(new EntityWrapper<Img>().eq("type", type));
                    for (Img img : imgs) {
                        BaseWarpper baseWarpper = new BaseWarpper();
                        baseWarpper.setId(img.getId().longValue());
                        baseWarpper.setPath(img.getImg());
                        list.add(baseWarpper);
                    }
                }
            }
            return ResponseWarpper.success(list);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/MainContentController.java
New file
@@ -0,0 +1,59 @@
package com.agentdriving.driver.modular.system.api;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.agentdriving.driver.modular.system.model.MainContent;
import com.agentdriving.driver.modular.system.service.IMainContentService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.util.ArrayList;
import java.util.List;
/**
* 事由控制器
* @author pzb
* @Date 2023/2/27 12:02
*/
@RestController
@RequestMapping("")
public class MainContentController {
    @Autowired
    private IMainContentService mainContentService;
    @ResponseBody
    @PostMapping("/base/mainContent/queryMainContent")
//    @ServiceLog(name = "获取系统事由", url = "/base/mainContent/queryMainContent")
    @ApiOperation(value = "获取系统事由", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "数据类型(1=转单,2=司机消单,3=用户取消订单)", name = "type", required = true, dataType = "int"),
    })
    public ResponseWarpper<List<String>> queryMainContent(Integer type){
        if(null == type){
            return ResponseWarpper.success(ResultUtil.paranErr("type"));
        }
        try {
            List<MainContent> mainContents = mainContentService.selectList(new EntityWrapper<MainContent>().eq("type", type)
                    .eq("status", 1).orderBy("createTime"));
            List<String> list = new ArrayList<>();
            for (MainContent mainContent : mainContents) {
                list.add(mainContent.getContent());
            }
            return ResponseWarpper.success(list);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/OrderController.java
New file
@@ -0,0 +1,520 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.warpper.*;
import com.alibaba.fastjson.JSON;
import com.agentdriving.driver.modular.system.model.Order;
import com.agentdriving.driver.modular.system.util.rongyun.RongYunUtil;
import com.agentdriving.driver.modular.system.util.rongyun.model.CloudRecordingCallback;
import com.agentdriving.driver.modular.system.warpper.*;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.service.IOrderService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 订单控制器
* @author pzb
* @Date 2023/2/16 15:02
*/
@RestController
@RequestMapping("")
public class OrderController {
    @Autowired
    private IOrderService orderService;
    @Autowired
    private IDriverService driverService;
    @Autowired
    private RongYunUtil rongYunUtil;
    @ResponseBody
    @PostMapping("/api/order/queryDriverServerOrder")
//    @ServiceLog(name = "获取司机服务中的订单id", url = "/api/order/queryDriverServerOrder")
    @ApiOperation(value = "获取司机服务中的订单id", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<Map<String, Object>> queryDriverServerOrder(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            Map<String, Object> map = orderService.queryDriverServerOrder(uid);
            return ResponseWarpper.success(map);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/driverAddOrder")
//    @ServiceLog(name = "司机代客下单", url = "/api/order/driverAddOrder")
    @ApiOperation(value = "司机代客下单", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<Integer> driverAddOrder(AddOrderWarpper addOrderWarpper){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.driverAddOrder(uid, addOrderWarpper);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/queryOrderHall")
//    @ServiceLog(name = "司机获取大厅订单列表", url = "/api/order/queryOrderHall")
    @ApiOperation(value = "司机获取大厅订单列表", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<HallOrderList>> queryOrderHall(Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<HallOrderList> hallOrderLists = orderService.queryOrderHall(uid, pageNum, pageSize);
            return ResponseWarpper.success(hallOrderLists);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/rejectionOrder")
//    @ServiceLog(name = "司机拒绝接单", url = "/api/order/rejectionOrder")
    @ApiOperation(value = "司机拒绝接单", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper rejectionOrder(Long orderId){
        if(null == orderId){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.rejectionOrder(uid, orderId);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/receiveOrder")
//    @ServiceLog(name = "司机接单操作", url = "/api/order/receiveOrder")
    @ApiOperation(value = "司机接单操作", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper receiveOrder(Long orderId){
        if(null == orderId){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.receiveOrder(uid, orderId);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/queryOrderInfo")
//    @ServiceLog(name = "获取订单详情", url = "/api/order/queryOrderInfo")
    @ApiOperation(value = "获取订单详情", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<OrderInfoWarpper> queryOrderInfo(Long orderId){
        if(null == orderId){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            OrderInfoWarpper orderInfoWarpper = orderService.queryOrderInfo(uid, orderId);
            return ResponseWarpper.success(orderInfoWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/driverProcessOperations")
//    @ServiceLog(name = "司机走订单流程", url = "/api/order/driverProcessOperations")
    @ApiOperation(value = "司机走订单流程", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper driverProcessOperations(ProcessOperationsWarpper processOperationsWarpper){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.driverProcessOperations(uid, processOperationsWarpper);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/transferOrder")
//    @ServiceLog(name = "司机转单操作", url = "/api/order/transferOrder")
    @ApiOperation(value = "司机转单操作", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(value = "原因", name = "cause", required = true, dataType = "string"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper transferOrder(Long orderId, String cause){
        if(ToolUtil.isEmpty(orderId)){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        if(ToolUtil.isEmpty(cause)){
            return ResponseWarpper.success(ResultUtil.paranErr("cause"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.transferOrder(uid, orderId, cause);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/setOrderEndAddress")
//    @ServiceLog(name = "司机修改订单终点", url = "/api/order/setOrderEndAddress")
    @ApiOperation(value = "司机修改订单终点", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper setOrderEndAddress(OrderEndAddressWarpper orderEndAddressWarpper){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.setOrderEndAddress(uid, orderEndAddressWarpper);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/cancelTransferOrder")
//    @ServiceLog(name = "司机取消转单操作", url = "/api/order/cancelTransferOrder")
    @ApiOperation(value = "司机取消转单操作", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper cancelTransferOrder(Long orderId){
        if(ToolUtil.isEmpty(orderId)){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.cancelTransferOrder(uid, orderId);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/driverCancelOrder")
//    @ServiceLog(name = "司机取消订单操作", url = "/api/order/driverCancelOrder")
    @ApiOperation(value = "司机取消订单操作", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(value = "原因", name = "cause", required = true, dataType = "string"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper driverCancelOrder(Long orderId, String cause){
        if(ToolUtil.isEmpty(orderId)){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        if(ToolUtil.isEmpty(cause)){
            return ResponseWarpper.success(ResultUtil.paranErr("cause"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.driverCancelOrder(uid, orderId, cause);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/queryOrderPrice")
//    @ServiceLog(name = "获取订单费用明细", url = "/api/order/queryOrderPrice")
    @ApiOperation(value = "获取订单费用明细", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<OrderPriceWarpper> queryOrderPrice(Long orderId){
        if(ToolUtil.isEmpty(orderId)){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            OrderPriceWarpper orderPriceWarpper = orderService.queryOrderPrice(uid, orderId);
            return ResponseWarpper.success(orderPriceWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/setOrderStatus")
//    @ServiceLog(name = "服务完成后修改订单状态", url = "/api/order/setOrderStatus")
    @ApiOperation(value = "服务完成后修改订单状态", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(value = "支付方式(1=线上,2=线下)", name = "payType", required = true, dataType = "int"),
            @ApiImplicitParam(value = "107(待支付),108(已完成)", name = "state", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper setOrderStatus(Long orderId, Integer payType, Integer state){
        if(ToolUtil.isEmpty(orderId)){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        if(ToolUtil.isEmpty(state)){
            return ResponseWarpper.success(ResultUtil.paranErr("state"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = orderService.setOrderStatus(uid, orderId, payType, state);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/queryDriverOrderList")
//    @ServiceLog(name = "获取司机订单列表", url = "/api/order/queryDriverOrderList")
    @ApiOperation(value = "获取司机订单列表", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单状态(107=未支付,109=已完成,301=已取消)", name = "state", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<DriverOrderListWarpper>> queryDriverOrderList(Integer state, Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<DriverOrderListWarpper> driverOrderListWarppers = orderService.queryDriverOrderList(uid, state, pageNum, pageSize);
            return ResponseWarpper.success(driverOrderListWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    /**
     * 服务录音回调
     * @param request
     */
    @ResponseBody
    @PostMapping("/base/order/cloudRecordingCallback")
    public void cloudRecordingCallback(HttpServletRequest request, HttpServletResponse response){
        CloudRecordingCallback cloudRecordingCallback = RongYunUtil.cloudRecordingCallback(request);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.err.println(sdf.format(new Date()) + "-------------------云端录制状态回调!-------------------");
        System.err.println(JSON.toJSONString(cloudRecordingCallback));
        if(null == cloudRecordingCallback){
            System.err.println("云端录制状态回调解析出错!");
            return;
        }
        Integer type = cloudRecordingCallback.getType();
        if(4 == type){//文件上传
            String fileUrl = cloudRecordingCallback.getOutput().getFileUrl();
            String roomId = cloudRecordingCallback.getRoomId();
            Order order = orderService.selectById(roomId);
            order.setRouteRecord(fileUrl);
            orderService.updateById(order);
        }
        PrintWriter out = null;
        try {
            out = response.getWriter();
        } catch (IOException e) {
            e.printStackTrace();
        }
        out.print("OK");
        out.flush();
        out.close();
    }
    @ResponseBody
    @PostMapping("/api/order/openOrderQRCode")
//    @ServiceLog(name = "打开下单二维码操作", url = "/api/order/openOrderQRCode")
    @ApiOperation(value = "打开下单二维码操作", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper openOrderQRCode(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverService.openOrderQRCode(uid);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/closeOrderQRCode")
//    @ServiceLog(name = "关闭下单二维码操作", url = "/api/order/closeOrderQRCode")
    @ApiOperation(value = "关闭下单二维码操作", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper closeOrderQRCode(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = driverService.closeOrderQRCode(uid);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/SystemBulletinController.java
New file
@@ -0,0 +1,93 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.service.ISystemBulletinService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import com.agentdriving.driver.modular.system.warpper.SystemBulletinInfo;
import com.agentdriving.driver.modular.system.warpper.SystemBulletinListWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.util.List;
/**
* 系统公告
* @author pzb
* @Date 2023/2/13 11:18
*/
@RestController
@RequestMapping("")
public class SystemBulletinController {
    @Autowired
    private ISystemBulletinService systemBulletinService;
    @Autowired
    private IDriverService driverService;
    @ResponseBody
    @PostMapping("/api/systemBulletin/querySystemBulletinList")
//    @ServiceLog(name = "获取系统公告列表", url = "/api/systemBulletin/querySystemBulletinList")
    @ApiOperation(value = "获取系统公告列表", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "size", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<SystemBulletinListWarpper>> querySystemBulletinList(Integer pageNum, Integer size){
        if(ToolUtil.isEmpty(pageNum)){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(ToolUtil.isEmpty(size)){
            return ResponseWarpper.success(ResultUtil.paranErr("size"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<SystemBulletinListWarpper> systemBulletinListWarppers = systemBulletinService.querySystemBulletinList(uid, pageNum, size);
            return ResponseWarpper.success(systemBulletinListWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/systemBulletin/querySystemBulletinInfo")
//    @ServiceLog(name = "获取系统公告详情", url = "/api/systemBulletin/querySystemBulletinInfo")
    @ApiOperation(value = "获取系统公告详情", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "公告id", name = "id", required = true, dataType = "long"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<SystemBulletinInfo> querySystemBulletinInfo(Long id){
        if(ToolUtil.isEmpty(id)){
            return ResponseWarpper.success(ResultUtil.paranErr("id"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            SystemBulletinInfo systemBulletinInfo = systemBulletinService.querySystemBulletinInfo(id);
            return ResponseWarpper.success(systemBulletinInfo);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/SystemConfigController.java
New file
@@ -0,0 +1,51 @@
package com.agentdriving.driver.modular.system.api;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.agentdriving.driver.modular.system.model.SystemConfig;
import com.agentdriving.driver.modular.system.service.ISystemConfigService;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* 系统配置
* @author pzb
* @Date 2023/2/25 11:53
*/
@RestController
@RequestMapping("")
public class SystemConfigController {
    @Autowired
    private ISystemConfigService systemConfigService;
    @ResponseBody
    @PostMapping("/base/config/queryTransferOrderConfig")
//    @ServiceLog(name = "获取转单提醒时间配置", url = "/base/config/queryTransferOrderConfig")
    @ApiOperation(value = "获取转单提醒时间配置", tags = {"司机端-服务中"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<Integer> queryTransferOrderConfig(){
        try {
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
            Integer num5 = jsonObject.getInteger("num5");
            return ResponseWarpper.success(num5);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/SystemMessageController.java
New file
@@ -0,0 +1,149 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.core.util.ToolUtil;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.agentdriving.driver.modular.system.model.SystemBulletinUser;
import com.agentdriving.driver.modular.system.model.SystemMessage;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.service.ISystemBulletinService;
import com.agentdriving.driver.modular.system.service.ISystemBulletinUserService;
import com.agentdriving.driver.modular.system.service.ISystemMessageService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import com.agentdriving.driver.modular.system.warpper.SystemMessageWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.util.List;
/**
* 系统消息
* @author pzb
* @Date 2023/2/10 15:35
*/
@RestController
@RequestMapping("")
public class SystemMessageController {
    @Autowired
    private ISystemMessageService systemMessageService;
    @Autowired
    private IDriverService driverService;
    @Autowired
    private ISystemBulletinService systemBulletinService;
    @Autowired
    private ISystemBulletinUserService systemBulletinUserService;
    @ResponseBody
    @PostMapping("/api/systemMessage/querySystemMessageList")
//    @ServiceLog(name = "获取系统消息列表", url = "/api/systemMessage/querySystemMessageList")
    @ApiOperation(value = "获取系统消息列表", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "size", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<SystemMessageWarpper>> querySystemMessageList(Integer pageNum, Integer size){
        if(ToolUtil.isEmpty(pageNum)){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(ToolUtil.isEmpty(size)){
            return ResponseWarpper.success(ResultUtil.paranErr("size"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<SystemMessageWarpper> systemMessageWarppers = systemMessageService.querySystemMessageList(uid, pageNum, size);
            return ResponseWarpper.success(systemMessageWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/systemMessage/readSystems")
//    @ServiceLog(name = "阅读系统消息", url = "/api/systemMessage/readSystems")
    @ApiOperation(value = "阅读系统消息", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "消息id,多个逗号分隔", name = "ids", required = true, dataType = "string"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper readSystems(String ids){
        if(ToolUtil.isEmpty(ids)){
            return ResponseWarpper.success(ResultUtil.paranErr("ids"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            systemMessageService.readSystems(uid, ids);
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/systemMessage/clearSystemMessage")
//    @ServiceLog(name = "清空系统消息和公告", url = "/api/systemMessage/clearSystemMessage")
    @ApiOperation(value = "清空系统消息和公告", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper clearSystemMessage(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            systemMessageService.clearSystemMessage(uid);
            systemBulletinService.clearSystemBulletinUser(uid);
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/systemMessage/queryUnreadQuantity")
//    @ServiceLog(name = "获取未读消息数量", url = "/api/systemMessage/queryUnreadQuantity")
    @ApiOperation(value = "获取未读消息数量", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<Integer> queryUnreadQuantity(){
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            int count = systemMessageService.selectCount(new EntityWrapper<SystemMessage>().eq("userType", 2).eq("userId", uid).eq("isRead", 0).eq("status", 1));
            int count1 = systemBulletinUserService.selectCount(new EntityWrapper<SystemBulletinUser>().eq("userType", 2).eq("userId", uid).eq("isRead", 0).eq("status", 1));
            return ResponseWarpper.success(count + count1);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/YouTuiController.java
New file
@@ -0,0 +1,166 @@
package com.agentdriving.driver.modular.system.api;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.model.YouTui;
import com.agentdriving.driver.modular.system.model.YouTuiDriver;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.service.IYouTuiDriverService;
import com.agentdriving.driver.modular.system.service.IYouTuiService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.DriverYouTuiWarpper;
import com.agentdriving.driver.modular.system.warpper.ResponseWarpper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.util.Date;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/3/15 17:50
 */
@RestController
@RequestMapping("")
public class YouTuiController {
    @Autowired
    private IYouTuiDriverService youTuiDriverService;
    @Autowired
    private IDriverService driverService;
    @Autowired
    private IYouTuiService youTuiService;
    @ResponseBody
    @PostMapping("/api/youtui/queryDriverYouTui")
//    @ServiceLog(name = "获取司机优推数据", url = "/api/youtui/queryDriverYouTui")
    @ApiOperation(value = "获取司机优推数据", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<DriverYouTuiWarpper>> queryDriverYouTui(Integer pageNum, Integer pageSize){
        if(ToolUtil.isEmpty(pageNum)){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(ToolUtil.isEmpty(pageSize)){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<DriverYouTuiWarpper> driverYouTuiWarppers = youTuiDriverService.queryDriverYouTui(uid, pageNum, pageSize);
            return ResponseWarpper.success(driverYouTuiWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/youtui/queryAllYouTui")
//    @ServiceLog(name = "获取兑换权益列表", url = "/api/youtui/queryAllYouTui")
    @ApiOperation(value = "获取兑换权益列表", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<DriverYouTuiWarpper>> queryAllYouTui(Integer pageNum, Integer pageSize){
        if(ToolUtil.isEmpty(pageNum)){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(ToolUtil.isEmpty(pageSize)){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            List<DriverYouTuiWarpper> driverYouTuiWarppers = youTuiDriverService.queryAllYouTui(pageNum, pageSize);
            return ResponseWarpper.success(driverYouTuiWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/youtui/redeemBenefits")
//    @ServiceLog(name = "司机兑换优推", url = "/api/youtui/redeemBenefits")
    @ApiOperation(value = "司机兑换优推", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "优推数据id", name = "id", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper redeemBenefits(Integer id){
        if(ToolUtil.isEmpty(id)){
            return ResponseWarpper.success(ResultUtil.paranErr("id"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            ResultUtil resultUtil = youTuiDriverService.redeemBenefits(uid, id);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/youtui/userYouTui")
//    @ServiceLog(name = "司机使用优推", url = "/api/youtui/userYouTui")
    @ApiOperation(value = "司机使用优推", tags = {"司机端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "优推数据id", name = "id", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper userYouTui(Integer id){
        if(ToolUtil.isEmpty(id)){
            return ResponseWarpper.success(ResultUtil.paranErr("id"));
        }
        try {
            Integer uid = driverService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.tokenErr();
            }
            YouTuiDriver youTuiDriver = youTuiDriverService.selectById(id);
            youTuiDriver.setState(2);
            if(youTuiDriver.getType() == 2){
                YouTui youTui = youTuiService.selectById(youTuiDriver.getYouTuiId());
                youTuiDriver.setEndTime(new Date(System.currentTimeMillis() + (youTui.getNumber() * 3600000)));
            }
            youTuiDriverService.updateById(youTuiDriver);
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthIntercepter.java
New file
@@ -0,0 +1,37 @@
package com.agentdriving.driver.modular.system.auth;
import com.alibaba.fastjson.JSON;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class AuthIntercepter implements HandlerInterceptor {
    private final static Logger log = LoggerFactory.getLogger(AuthIntercepter.class);
    @Autowired
    AuthService authService;
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws IOException {
        String appid = req.getParameter("appid");
        String sign = req.getParameter("sign");
        ResultUtil resultUtil = authService.checkSyncAuth(appid, sign, req);
        if (resultUtil.getCode() != 200) {
            res.setStatus(HttpStatus.OK.value());
            res.setHeader("Content-type", "text/html;charset=UTF-8");
            res.getWriter().print(JSON.toJSONString(resultUtil));//Res.Failure("req timeout, please try again")
            return false;
        }
        return true;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthService.java
New file
@@ -0,0 +1,50 @@
package com.agentdriving.driver.modular.system.auth;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
@Service
public class AuthService {
    private final static Logger log = LoggerFactory.getLogger(AuthService.class);
    public static final AuthService me = new AuthService();
    /**
     * 鉴权
     * @param appid
     * @param sign
     * @param requset
     * @return
     */
    public ResultUtil checkSyncAuth(String appid, String sign, HttpServletRequest requset) {
        try {
            if (StringUtils.isBlank(sign)) {
                return ResultUtil.sign();
            }
            // 1.鉴权
            String signUrl = AuthenticationKit.getSignUrl(requset, "sign");
            signUrl = signUrl.replaceAll("& #40;", "\\(");
            signUrl = signUrl.replaceAll("& #41;", "\\)");
            String signUrlEncode = AuthenticationKit.signUrlEncode(signUrl, appid);
            if(sign.indexOf(" ") != -1 && signUrlEncode.indexOf("+") != -1){//处理前后端加密差异
                signUrlEncode = signUrlEncode.replaceAll("\\+", " ");
            }
            // 签名无
            if (StringUtils.isBlank(sign) || !sign.equals(signUrlEncode)) {
                return ResultUtil.sign();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
        return ResultUtil.success();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthenticationKit.java
New file
@@ -0,0 +1,232 @@
package com.agentdriving.driver.modular.system.auth;
import org.apache.tomcat.util.codec.binary.Base64;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
 *
 * 接口鉴权工具类
 *
 * @author gwx 2017-12-23
 *
 */
public class AuthenticationKit {
    public static final String utf8="UTF-8";
    /**
     * 返回64 位 token
     *
     * @param key 自定义安全字符
     * @return
     * @throws Exception
     */
    public static String getToken(String key) throws Exception {
        // 随机生成 32位字符
        String salt = HashKit.generateSaltForSha256();
        // 获取当前时间
        long cur = System.currentTimeMillis();
        // 生成64位token
        String access_token = getToken256(key, salt, cur);
        return access_token;
    }
    /**
     * 返回64 位 token
     *
     * @param key
     * @return
     * @throws Exception
     */
    public static String getToken256(String key, String salt, long cur) throws Exception {
        // 生成64位token
        String access_token = HashKit.sha256(salt + cur + key);
        return access_token;
    }
    /**
     * 返回到秒
     *
     * @return
     */
    public static String createTimestamp() {
        long l = System.currentTimeMillis();
        return Long.toString(l / 1000);
    }
    /**
     * 返回noce 不带 短杠"-"
     *
     * @return
     */
    public static String createNonceStr() {
        return getUUID();
    }
    public static String getUUID() {
        UUID uuid = UUID.randomUUID();
        String str = uuid.toString();
        str = str.replaceAll("-", "");
        return str;
    }
    /**
     * 组装路径
     *
     * @param params
     * @return
     */
    public static String localSignParam(Map<String, String> params) {
        return localSignUrl(null, params, false);
    }
    /**
     * 组装签名路径
     * @param url
     * @param params
     * @return
     */
    public static String localSignUrl(String url, Map<String, String> params, boolean urlEncode) {
        StringBuilder strBuilder = new StringBuilder();
//        if(StringUtils.isNotBlank(url) && url.lastIndexOf("?")==-1){
//            strBuilder.append(url).append("?");
//        }
        Set es = params.entrySet();//所有参与传参的参数按照accsii排序(升序)
        Iterator it = es.iterator();
        while(it.hasNext()) {
            Map.Entry entry = (Map.Entry)it.next();
            String k = (String)entry.getKey();
            Object v = entry.getValue();
            if(null != v && !"".equals(v)) {
                strBuilder.append(k + "=" + v + "&");
            }
        }
        return strBuilder.substring(0, strBuilder.length() - 1);
//        for (String key : params.keySet()) {
//            if (params.get(key) != null) {
//                String lowerKey = key.toLowerCase();
//                String encodeKey = lowerKey;
//                String encodedValue = params.get(key);
//                if (urlEncode){
//                    encodeKey = UrlEncoderUtils.encode(lowerKey);
//                    encodedValue = UrlEncoderUtils.encode(encodedValue);
//                }
//                if (!seeOne) {
//                    seeOne = true;
//                } else {
//                    strBuilder.append("&");
//                }
//                strBuilder.append(encodeKey).append("=").append(encodedValue);
//            }
//        }
//        return strBuilder.toString();
    }
    /**
     * 加密签名路径生成签名
     *
     * @param signUrl
     *            /token?appid=12345&timestamp=1512440267&nonce=12345
     * @param encryptKey
     * @return
     * @throws Exception
     */
    public static String signUrlEncode(String signUrl, String encryptKey) throws Exception {
        byte[] signByte = HMACSHA1.HmacSHA1Encrypt(signUrl, encryptKey);
        String localSign = Base64.encodeBase64String(signByte);
        return localSign;
    }
    /**
     * 返回鉴权 签名路径
     *
     * @param req
     * @return
     */
    public static String getSignUrl(HttpServletRequest req) {
        return getSignUrl(req,"");
    }
    /**
     * 服务端 获取 客户端请求 组装验证签名
     * @param req
     * @param delParams 移除不相关 的签名参数
     * @return
     */
    public static String getSignUrl(HttpServletRequest req, String... delParams) {
        // 获取相对的访问路径
        String url = req.getServletPath();
        Map<String, String> paramMap = packageRequestGetParams(req);
        if (paramMap.size() > 0) {
            // 删除
            for (int i = 0, len = delParams.length; i < len; i++) {
                paramMap.remove(delParams[i]);
            }
            return localSignUrl(url, paramMap, false);
        }
        return null;
    }
    /**
     * 组装签名路径 客户端测试用
     * @param url api访问地址 "/apid"
     * @param appid
     * @return
     */
    public static String getSignUrl(String url, String appid, Map<String, String> queryParas) {
        Map<String, String> params = new TreeMap<String, String>();
        params.put("appid", appid);
        params.put("nonce", createNonceStr());
        params.put("timestamp", createTimestamp());
        if(queryParas!=null && queryParas.size()>0){
            params.putAll(queryParas);
        }
        return localSignUrl(url, params, false);
    }
    /**
     * 组装签名路径 客户端测试用
     * @param url api访问地址 "/apid"
     * @param appid
     * @return
     */
    public static String getSignUrl(String url, String appid) {
        return getSignUrl(url, appid, "");
    }
    /**
     *
     * @param url
     * @param appid
     * @param params
     * @return
     */
    public static String getSignUrl(String url, String appid, String params) {
        String urlTmp = getSignUrl(url, appid, new HashMap<String,String>());
        return urlTmp + UrlEncoderUtils.encode(params);
    }
    /**
     * 解析get参数返回treemap
     * @param req
     * @return
     */
    public static Map<String, String> packageRequestGetParams(
            HttpServletRequest req) {
        Map<String, String> paramMap = new TreeMap<String, String>();
        Enumeration pNames = req.getParameterNames();
        while (pNames.hasMoreElements()) {
            String key = (String) pNames.nextElement();
            String value = req.getParameter(key);
            paramMap.put(key, value);
        }
        return paramMap;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/Configuration.java
New file
@@ -0,0 +1,26 @@
package com.agentdriving.driver.modular.system.auth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Component
public class Configuration implements WebMvcConfigurer {
    @Autowired
    private AuthIntercepter authIntercepter;
    /**
     * 重写添加拦截器方法并添加配置拦截器
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(authIntercepter).addPathPatterns("/api/**")
//                .excludePathPatterns("/base/**");
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/HMACSHA1.java
New file
@@ -0,0 +1,63 @@
package com.agentdriving.driver.modular.system.auth;
import org.apache.tomcat.util.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class HMACSHA1 {
    private static final String MAC_NAME = "HmacSHA1";
    private static final String ENCODING = "UTF-8";
    /*
     * 展示了一个生成指定算法密钥的过程 初始化HMAC密钥
     *
     * @return
     *
     * @throws Exception
     *
     * public static String initMacKey() throws Exception { //得到一个 指定算法密钥的密钥生成器
     * KeyGenerator KeyGenerator keyGenerator
     * =KeyGenerator.getInstance(MAC_NAME); //生成一个密钥 SecretKey secretKey
     * =keyGenerator.generateKey(); return null; }
     */
    /**
     * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
     *
     * @param encryptText
     *            被签名的字符串
     * @param encryptKey
     *            密钥
     * @return
     * @throws Exception
     */
    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        Mac mac = Mac.getInstance(MAC_NAME);
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
        // 生成一个指定 Mac 算法 的 Mac 对象
        // 用给定密钥初始化 Mac 对象
        mac.init(secretKey);
        byte[] text = encryptText.getBytes(ENCODING);
        // 完成 Mac 操作
        return mac.doFinal(text);
    }
    public static void main(String[] args) {
        String encryptText = "123";
        String encryptKey = "adc";
        try {
            byte[] b = HmacSHA1Encrypt(encryptText, encryptKey);
            String str = HashKit.toHex(b);
            String str2 = new String(Base64.encodeBase64(b));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/HashKit.java
New file
@@ -0,0 +1,109 @@
package com.agentdriving.driver.modular.system.auth;
/**
 * Copyright (c) 2011-2017, James Zhan 詹波 (jfinal@126.com).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.security.MessageDigest;
public class HashKit {
    public static final long FNV_OFFSET_BASIS_64 = 0xcbf29ce484222325L;
    public static final long FNV_PRIME_64 = 0x100000001b3L;
    private static final java.security.SecureRandom random = new java.security.SecureRandom();
    private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
    private static final char[] CHAR_ARRAY = "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
            .toCharArray();
    public static long fnv1a64(String key) {
        long hash = FNV_OFFSET_BASIS_64;
        for (int i = 0, size = key.length(); i < size; i++) {
            hash ^= key.charAt(i);
            hash *= FNV_PRIME_64;
        }
        return hash;
    }
    public static String md5(String srcStr) {
        return hash("MD5", srcStr);
    }
    public static String sha1(String srcStr) {
        return hash("SHA-1", srcStr);
    }
    public static String sha256(String srcStr) {
        return hash("SHA-256", srcStr);
    }
    public static String sha384(String srcStr) {
        return hash("SHA-384", srcStr);
    }
    public static String sha512(String srcStr) {
        return hash("SHA-512", srcStr);
    }
    public static String hash(String algorithm, String srcStr) {
        try {
            MessageDigest md = MessageDigest.getInstance(algorithm);
            byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
            return toHex(bytes);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    public static String toHex(byte[] bytes) {
        StringBuilder ret = new StringBuilder(bytes.length * 2);
        for (int i = 0; i < bytes.length; i++) {
            ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
            ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
        }
        return ret.toString();
    }
    /**
     * md5 128bit 16bytes sha1 160bit 20bytes sha256 256bit 32bytes sha384
     * 384bit 48bytes sha512 512bit 64bytes
     */
    public static String generateSalt(int saltLength) {
        StringBuilder salt = new StringBuilder(saltLength);
        for (int i = 0; i < saltLength; i++) {
            salt.append(CHAR_ARRAY[random.nextInt(CHAR_ARRAY.length)]);
        }
        return salt.toString();
    }
    public static String generateSaltForSha256() {
        return generateSalt(32);
    }
    public static String generateSaltForSha512() {
        return generateSalt(64);
    }
    public static boolean slowEquals(byte[] a, byte[] b) {
        if (a == null || b == null) {
            return false;
        }
        int diff = a.length ^ b.length;
        for (int i = 0; i < a.length && i < b.length; i++) {
            diff |= a[i] ^ b[i];
        }
        return diff == 0;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/UrlEncoderUtils.java
New file
@@ -0,0 +1,44 @@
package com.agentdriving.driver.modular.system.auth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class UrlEncoderUtils {
    private static final String PATH_DELIMITER = "/";
    private static final Logger log = LoggerFactory.getLogger(UrlEncoderUtils.class);
    public static String encode(String originUrl) {
        try {
            return URLEncoder.encode(originUrl, "UTF-8").replace("+", "%20").replace("*", "%2A")
                    .replace("%7E", "~");
        } catch (UnsupportedEncodingException e) {
            log.error("URLEncoder error, encode utf8, exception: {}", e);
        }
        return null;
    }
    // encode路径, 不包括分隔符
    public static String encodeEscapeDelimiter(String urlPath) {
        StringBuilder pathBuilder = new StringBuilder();
        String[] pathSegmentsArr = urlPath.split(PATH_DELIMITER);
        boolean isFirstSegMent = true;
        for (String pathSegment : pathSegmentsArr) {
            if (isFirstSegMent) {
                pathBuilder.append(encode(pathSegment));
                isFirstSegMent = false;
            } else {
                pathBuilder.append(PATH_DELIMITER).append(encode(pathSegment));
            }
        }
        if (urlPath.endsWith(PATH_DELIMITER)) {
            pathBuilder.append(PATH_DELIMITER);
        }
        return pathBuilder.toString();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/AccountChangeDetailMapper.java
New file
@@ -0,0 +1,63 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.AccountChangeDetail;
import com.agentdriving.driver.modular.system.warpper.BalanceDetailWarpper;
import com.agentdriving.driver.modular.system.warpper.CommissionDetailWarpper;
import com.agentdriving.driver.modular.system.warpper.IntegralIncomeAndExpensesWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/3/4 11:33
 */
public interface AccountChangeDetailMapper extends BaseMapper<AccountChangeDetail> {
    /**
     * 获取积分收支明细
     * @param driverId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<IntegralIncomeAndExpensesWarpper> queryDriverIntegralIncomeAndExpenses(@Param("driverId") Integer driverId, @Param("type") Integer type,
                                                                                @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
    /**
     * 获取佣金收入明细列表
     * @param driverId
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<CommissionDetailWarpper> queryCommissionDetail(@Param("driverId") Integer driverId, @Param("time") String time,
                                                        @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
    /**
     * 获取总佣金
     * @param driverId
     * @param time
     * @return
     */
    Double queryCommissionDetailTotal(@Param("driverId") Integer driverId, @Param("time") String time);
    /**
     * 获取账户余额明细
     * @param driverId
     * @param time
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<BalanceDetailWarpper> queryBalanceDetail(@Param("driverId") Integer driverId, @Param("time") String time,
                                                  @Param("type") Integer type, @Param("pageNum") Integer pageNum,
                                                  @Param("pageSize") Integer pageSize);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/AgentMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Agent;
/**
 * @author zhibing.pu
 * @Date 2023/3/22 22:48
 */
public interface AgentMapper extends BaseMapper<Agent> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/AppUserMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.AppUser;
public interface AppUserMapper extends BaseMapper<AppUser> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/BranchOfficeMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.BranchOffice;
public interface BranchOfficeMapper extends BaseMapper<BranchOffice> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CancelOrderMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.CancelOrder;
public interface CancelOrderMapper extends BaseMapper<CancelOrder> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CashWithdrawalMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.CashWithdrawal;
/**
 * @author zhibing.pu
 * @date 2023/3/18 17:02
 */
public interface CashWithdrawalMapper extends BaseMapper<CashWithdrawal> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CommercialMapper.java
New file
@@ -0,0 +1,20 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Commercial;
import com.agentdriving.driver.modular.system.warpper.CommercialWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CommercialMapper extends BaseMapper<Commercial> {
    /**
     * 获取广告列表
     * @param type      广告类型(1=弹窗广告)
     * @param device    设备(1=小程序,2=司机端)
     * @return
     */
    List<CommercialWarpper> queryCommercialList(@Param("type") Integer type, @Param("device") Integer device);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CommercialUserEjectMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.CommercialUserEject;
public interface CommercialUserEjectMapper extends BaseMapper<CommercialUserEject> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/CouponMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Coupon;
public interface CouponMapper extends BaseMapper<Coupon> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DeptMapper.java
New file
@@ -0,0 +1,31 @@
package com.agentdriving.driver.modular.system.dao;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Dept;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 部门表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface DeptMapper extends BaseMapper<Dept> {
    /**
     * 获取ztree的节点列表
     */
    List<ZTreeNode> tree();
    /**
     * 获取所有部门列表
     */
    List<Map<String, Object>> list(@Param("condition") String condition);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DictMapper.java
New file
@@ -0,0 +1,34 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Dict;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 字典表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface DictMapper extends BaseMapper<Dict> {
    /**
     * 根据编码获取词典列表
     */
    List<Dict> selectByCode(@Param("code") String code);
    /**
     * 查询字典列表
     */
    List<Map<String, Object>> list(@Param("condition") String conditiion);
    /**
     * 根据父类编码获取词典列表
     */
    List<Dict> selectByParentCode(@Param("code") String code);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DriverBankMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.DriverBank;
/**
 * @author zhibing.pu
 * @date 2023/4/23 17:40
 */
public interface DriverBankMapper extends BaseMapper<DriverBank> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DriverMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Driver;
public interface DriverMapper extends BaseMapper<Driver> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/DriverWorkMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.DriverWork;
public interface DriverWorkMapper extends BaseMapper<DriverWork> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/EditionMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Edition;
/**
 * @author zhibing.pu
 * @Date 2023/3/22 23:30
 */
public interface EditionMapper extends BaseMapper<Edition> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/ExpenseMapper.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Expense;
/**
 * <p>
  * 报销表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-12-04
 */
public interface ExpenseMapper extends BaseMapper<Expense> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/HtmlMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Html;
/**
 * @author 39373
 * @date 2023/2/26 17:29
 */
public interface HtmlMapper extends BaseMapper<Html> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/ImgMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Img;
public interface ImgMapper extends BaseMapper<Img> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/JoiningRequirementsMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.JoiningRequirements;
/**
 * @author zhibing.pu
 * @date 2023/3/9 9:22
 */
public interface JoiningRequirementsMapper extends BaseMapper<JoiningRequirements> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/LoginLogMapper.java
New file
@@ -0,0 +1,27 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.agentdriving.driver.modular.system.model.LoginLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 登录记录 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface LoginLogMapper extends BaseMapper<LoginLog> {
    /**
     * 获取登录日志
     */
    List<Map<String, Object>> getLoginLogs(@Param("page") Page<LoginLog> page, @Param("beginTime") String beginTime,
                                           @Param("endTime") String endTime, @Param("logName") String logName, @Param("orderByField") String orderByField, @Param("isAsc") boolean isAsc);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/MainContentMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.MainContent;
public interface MainContentMapper extends BaseMapper<MainContent> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/MenuMapper.java
New file
@@ -0,0 +1,80 @@
package com.agentdriving.driver.modular.system.dao;
import com.agentdriving.driver.core.node.MenuNode;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Menu;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
  * 菜单表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface MenuMapper extends BaseMapper<Menu> {
    /**
     * 根据条件查询菜单
     *
     * @return
     * @date 2017年2月12日 下午9:14:34
     */
    List<Map<String, Object>> selectMenus(@Param("condition") String condition, @Param("level") String level);
    /**
     * 根据条件查询菜单
     *
     * @return
     * @date 2017年2月12日 下午9:14:34
     */
    List<Long> getMenuIdsByRoleId(@Param("roleId") Integer roleId);
    /**
     * 获取菜单列表树
     *
     * @return
     * @date 2017年2月19日 下午1:33:51
     */
    List<ZTreeNode> menuTreeList();
    /**
     * 获取菜单列表树
     *
     * @return
     * @date 2017年2月19日 下午1:33:51
     */
    List<ZTreeNode> menuTreeListByMenuIds(List<Long> menuIds);
    /**
     * 删除menu关联的relation
     *
     * @param menuId
     * @return
     * @date 2017年2月19日 下午4:10:59
     */
    int deleteRelationByMenu(Long menuId);
    /**
     * 获取资源url通过角色id
     *
     * @param roleId
     * @return
     * @date 2017年2月19日 下午7:12:38
     */
    List<String> getResUrlsByRoleId(Integer roleId);
    /**
     * 根据角色获取菜单
     *
     * @param roleIds
     * @return
     * @date 2017年2月19日 下午10:35:40
     */
    List<MenuNode> getMenusByRoleIds(List<Integer> roleIds);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/NoticeMapper.java
New file
@@ -0,0 +1,25 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Notice;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 通知表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface NoticeMapper extends BaseMapper<Notice> {
    /**
     * 获取通知列表
     */
    List<Map<String, Object>> list(@Param("condition") String condition);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OperationLogMapper.java
New file
@@ -0,0 +1,26 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.agentdriving.driver.modular.system.model.OperationLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 操作日志 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface OperationLogMapper extends BaseMapper<OperationLog> {
    /**
     * 获取操作日志
     */
    List<Map<String, Object>> getOperationLogs(@Param("page") Page<OperationLog> page, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("logName") String logName, @Param("logType") String logType, @Param("orderByField") String orderByField, @Param("isAsc") boolean isAsc);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OrderMapper.java
New file
@@ -0,0 +1,68 @@
package com.agentdriving.driver.modular.system.dao;
import com.agentdriving.driver.modular.system.warpper.*;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.warpper.*;
import com.agentdriving.driver.modular.system.model.Order;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface OrderMapper extends BaseMapper<Order> {
    /**
     * 获取大厅订单列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<HallOrderList> queryOrderHall(@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
    /**
     * 获取订单详情
     * @param orderId
     * @return
     */
    OrderInfoWarpper queryOrderInfo(@Param("orderId") Long orderId);
    /**
     * 获取司机订单列表
     * @param driverId
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<DriverOrderListWarpper> queryDriverOrderList(@Param("driverId") Integer driverId, @Param("state") Integer state,
                                                      @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
    /**
     * 获取司机邀请列表
     * @param driverId
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<InviteListWarpper> queryInviteList(@Param("driverId") Integer driverId, @Param("time") String time,
                                            @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
    /**
     * 获取司机订单量排行
     * @param time
     * @param dayType
     * @return
     */
    List<PerformanceRankingWarpper> queryDriverRank(@Param("time") String time, @Param("dayType") Integer dayType);
    /**
     * 完成线下收款状态
     */
    void completeCollection();
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OrderRefusalMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.OrderRefusal;
public interface OrderRefusalMapper extends BaseMapper<OrderRefusal> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/OrderTransferMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.OrderTransfer;
public interface OrderTransferMapper extends BaseMapper<OrderTransfer> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RechargeRecordMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.RechargeRecord;
/**
 * @author zhibing.pu
 * @date 2023/3/21 23:13
 */
public interface RechargeRecordMapper extends BaseMapper<RechargeRecord> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RelationMapper.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Relation;
/**
 * <p>
  * 角色和菜单关联表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface RelationMapper extends BaseMapper<Relation> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RevenueMapper.java
New file
@@ -0,0 +1,31 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Revenue;
import com.agentdriving.driver.modular.system.warpper.PerformanceRankingWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface RevenueMapper extends BaseMapper<Revenue> {
    /**
     * 获取司机总收入
     * @param driverId
     * @return
     * @throws Exception
     */
    Double queryTotalAmount(@Param("driverId") Integer driverId) throws Exception;
    /**
     * 获取司机佣金排行
     * @param time
     * @param dayType
     * @return
     */
    List<PerformanceRankingWarpper> queryDriverRank(@Param("type") Integer type, @Param("time") String time,
                                                    @Param("dayType") Integer dayType);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/RoleMapper.java
New file
@@ -0,0 +1,53 @@
package com.agentdriving.driver.modular.system.dao;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Role;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
  * 角色表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface RoleMapper extends BaseMapper<Role> {
    /**
     * 根据条件查询角色列表
     *
     * @return
     * @date 2017年2月12日 下午9:14:34
     */
    List<Map<String, Object>> selectRoles(@Param("condition") String condition);
    /**
     * 删除某个角色的所有权限
     *
     * @param roleId 角色id
     * @return
     * @date 2017年2月13日 下午7:57:51
     */
    int deleteRolesById(@Param("roleId") Integer roleId);
    /**
     * 获取角色列表树
     *
     * @return
     * @date 2017年2月18日 上午10:32:04
     */
    List<ZTreeNode> roleTreeList();
    /**
     * 获取角色列表树
     *
     * @return
     * @date 2017年2月18日 上午10:32:04
     */
    List<ZTreeNode> roleTreeListByRoleId(String[] roleId);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemBulletinMapper.java
New file
@@ -0,0 +1,31 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.SystemBulletin;
import com.agentdriving.driver.modular.system.warpper.SystemBulletinInfo;
import com.agentdriving.driver.modular.system.warpper.SystemBulletinListWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SystemBulletinMapper extends BaseMapper<SystemBulletin> {
    /**
     * 获取系统公告
     * @param uid
     * @param pageNum
     * @param size
     * @return
     */
    List<SystemBulletinListWarpper> querySystemBulletinList(@Param("uid") Integer uid, @Param("pageNum") Integer pageNum,
                                                            @Param("size") Integer size);
    /**
     * 获取公告详情
     * @param id
     * @return
     */
    SystemBulletinInfo querySystemBulletinInfo(@Param("id") Long id);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemBulletinUserMapper.java
New file
@@ -0,0 +1,15 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.SystemBulletinUser;
import org.apache.ibatis.annotations.Param;
public interface SystemBulletinUserMapper extends BaseMapper<SystemBulletinUser> {
    /**
     * 清空系统公告
     * @param userId
     */
    void clearSystemBulletinUser(@Param("userId") Integer userId);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemConfigMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.SystemConfig;
public interface SystemConfigMapper extends BaseMapper<SystemConfig> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/SystemMessageMapper.java
New file
@@ -0,0 +1,29 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.warpper.SystemMessageWarpper;
import com.agentdriving.driver.modular.system.model.SystemMessage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SystemMessageMapper extends BaseMapper<SystemMessage> {
    /**
     * 获取个人系统消息列表
     * @param uid
     * @param pageNum
     * @param size
     * @return
     */
    List<SystemMessageWarpper> querySystemMessageList(@Param("uid") Integer uid, @Param("pageNum") Integer pageNum,
                                                      @Param("size") Integer size);
    /**
     * 清空系统消息和公告
     * @param userId
     */
    void clearSystemMessage(@Param("userId") Integer userId);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/UserMapper.java
New file
@@ -0,0 +1,45 @@
package com.agentdriving.driver.modular.system.dao;
import com.agentdriving.driver.core.datascope.DataScope;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 管理员表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface UserMapper extends BaseMapper<User> {
    /**
     * 修改用户状态
     */
    int setStatus(@Param("userId") Integer userId, @Param("status") int status);
    /**
     * 修改密码
     */
    int changePwd(@Param("userId") Integer userId, @Param("pwd") String pwd);
    /**
     * 根据条件查询用户列表
     */
    List<Map<String, Object>> selectUsers(@Param("dataScope") DataScope dataScope, @Param("name") String name, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptid") Integer deptid);
    /**
     * 设置用户的角色
     */
    int setRoles(@Param("userId") Integer userId, @Param("roleIds") String roleIds);
    /**
     * 通过账号获取用户
     */
    User getByAccount(@Param("account") String account);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/UserToCouponMapper.java
New file
@@ -0,0 +1,27 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.Coupon;
import com.agentdriving.driver.modular.system.model.UserToCoupon;
import org.apache.ibatis.annotations.Param;
/**
 * 用户优惠券
 * @author zhibing.pu
 * @date 2023/3/2 11:44
 */
public interface UserToCouponMapper extends BaseMapper<UserToCoupon> {
    /**
     * 获取可用优惠券
     * @param uid
     * @param price
     * @return
     */
    Coupon queryCoupon(@Param("uid") Integer uid, @Param("price") Double price);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/WeatherCityMapper.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.WeatherCity;
public interface WeatherCityMapper extends BaseMapper<WeatherCity> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/YouTuiDriverMapper.java
New file
@@ -0,0 +1,49 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.YouTuiDriver;
import com.agentdriving.driver.modular.system.warpper.DriverYouTuiWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface YouTuiDriverMapper extends BaseMapper<YouTuiDriver> {
    /**
     * 获取司机优推兑换月数据
     * @param driverId
     * @return
     */
    List<Map<String, String>> queryRedemptionDate(@Param("driverId") Integer driverId);
    /**
     * 获取日期内的记录
     * @param driverId
     * @param createTime
     * @return
     */
    List<DriverYouTuiWarpper> queryYouTuiDriverList(@Param("driverId") Integer driverId, @Param("createTime") String createTime);
    /**
     * 获取司机优推数据
     * @param driverId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<DriverYouTuiWarpper> queryDriverYouTui(@Param("driverId") Integer driverId, @Param("pageNum") Integer pageNum,
                                                @Param("pageSize") Integer pageSize);
    /**
     * 获取优推数据
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<DriverYouTuiWarpper> queryAllYouTui(@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/YouTuiMapper.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.agentdriving.driver.modular.system.model.YouTui;
/**
 * @author zhibing.pu
 * @date 2023/3/18 9:59
 */
public interface YouTuiMapper extends BaseMapper<YouTui> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/AccountChangeDetailMapper.xml
New file
@@ -0,0 +1,84 @@
<?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.agentdriving.driver.modular.system.dao.AccountChangeDetailMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.AccountChangeDetail">
        <id column="id" property="id"/>
        <result column="code" property="code"/>
        <result column="userType" property="userType"/>
        <result column="userId" property="userId"/>
        <result column="type" property="type"/>
        <result column="changeType" property="changeType"/>
        <result column="oldData" property="oldData"/>
        <result column="newData" property="newData"/>
        <result column="orderId" property="orderId"/>
        <result column="explain" property="explain"/>
        <result column="createTime" property="createTime"/>
    </resultMap>
    <select id="queryDriverIntegralIncomeAndExpenses" resultType="com.agentdriving.driver.modular.system.warpper.IntegralIncomeAndExpensesWarpper">
        select * from (
        select
        `explain` as description,
        UNIX_TIMESTAMP(createTime) * 1000 as createTime,
        (newData - oldData) as integral
        from t_account_change_detail where `type` = 2 and userType = 2 and userId = #{driverId}
        ) as aa where 1 = 1
        <if test="null != type and 1 == type">
            and aa.integral &gt; 0
        </if>
        <if test="null != type and 2 == type">
            and aa.integral &lt; 0
        </if>
        order by aa.createTime desc limit #{pageNum}, #{pageSize}
    </select>
    <select id="queryCommissionDetail" resultType="com.agentdriving.driver.modular.system.warpper.CommissionDetailWarpper">
        select
        `explain`,
        UNIX_TIMESTAMP(createTime) * 1000 as createTime,
        (newData - oldData) as money,
        newData as balance
        from t_account_change_detail where userType = 2 and userId = #{driverId}
        <if test="null != time and '' != time">
            and DATE_FORMAT(createTime, '%Y年%m月') = #{time}
        </if>
        order by createTime desc limit #{pageNum}, #{pageSize}
    </select>
    <select id="queryCommissionDetailTotal" resultType="double">
        select
        sum(money) as money
        from (
            select
            (newData - oldData) as money
            from t_account_change_detail where userType = 2 and userId = #{driverId}
            <if test="null != time and '' != time">
                and DATE_FORMAT(createTime, '%Y年%m月') = #{time}
            </if>
        ) as aa where aa.money > 0
    </select>
    <select id="queryBalanceDetail" resultType="com.agentdriving.driver.modular.system.warpper.BalanceDetailWarpper">
        select
        code,
        changeType as `type`,
        UNIX_TIMESTAMP(createTime) * 1000 as createTime,
        (newData - oldData) as amount,
        newData as balance
        from t_account_change_detail where userType = 2 and userId = #{driverId} and changeType in (1, 3, 4, 7, 8)
        <if test="null != time and '' != time">
            and DATE_FORMAT(createTime, '%Y年%m月') = #{time}
        </if>
        <if test="null != type">
            and changeType = #{type}
        </if>
        order by createTime desc limit #{pageNum}, #{pageSize}
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/AgentMapper.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.agentdriving.driver.modular.system.dao.AgentMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Agent">
        <id column="id" property="id"/>
        <result column="principal" property="principal"/>
        <result column="principalPhone" property="principalPhone"/>
        <result column="email" property="email"/>
        <result column="provinceName" property="provinceName"/>
        <result column="provinceCode" property="provinceCode"/>
        <result column="cityCode" property="cityCode"/>
        <result column="cityName" property="cityName"/>
        <result column="status" property="status"/>
        <result column="createTime" property="createTime"/>
        <result column="bankDeposit" property="bankDeposit"/>
        <result column="bankAccount" property="bankAccount"/>
        <result column="serviceCalls" property="serviceCalls"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/AppUserMapper.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.agentdriving.driver.modular.system.dao.AppUserMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.AppUser">
        <id column="id" property="id"/>
        <result column="nickname" property="nickname"/>
        <result column="phone" property="phone"/>
        <result column="sex" property="sex"/>
        <result column="avatar" property="avatar"/>
        <result column="openid" property="openid"/>
        <result column="unionid" property="unionid"/>
        <result column="emergencyContact" property="emergencyContact"/>
        <result column="emergencyPhone" property="emergencyPhone"/>
        <result column="accountBalance" property="accountBalance"/>
        <result column="userTagId" property="userTagId"/>
        <result column="status" property="status"/>
        <result column="createTime" property="createTime"/>
        <result column="is_exception" property="isException"/>
        <result column="remark" property="remark"/>
        <result column="inviterType" property="inviterType"/>
        <result column="inviterId" property="inviterId"/>
        <result column="cancelCount" property="cancelCount"/>
        <result column="havDiscount" property="havDiscount"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/BranchOfficeMapper.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.agentdriving.driver.modular.system.dao.BranchOfficeMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.BranchOffice">
        <id column="id" property="id"/>
        <result column="agentId" property="agentId"/>
        <result column="principal" property="principal"/>
        <result column="principalPhone" property="principalPhone"/>
        <result column="email" property="email"/>
        <result column="provinceCode" property="provinceCode"/>
        <result column="provinceName" property="provinceName"/>
        <result column="cityCode" property="cityCode"/>
        <result column="cityName" property="cityName"/>
        <result column="districtCode" property="districtCode"/>
        <result column="districtName" property="districtName"/>
        <result column="status" property="status"/>
        <result column="createTime" property="createTime"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CancelOrderMapper.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.agentdriving.driver.modular.system.dao.CancelOrderMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.CancelOrder">
        <id column="id" property="id"/>
        <result column="orderId" property="orderId"/>
        <result column="userType" property="userType"/>
        <result column="userId" property="userId"/>
        <result column="cause" property="cause"/>
        <result column="status" property="status"/>
        <result column="createTime" property="createTime"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CashWithdrawalMapper.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.agentdriving.driver.modular.system.dao.CashWithdrawalMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.CashWithdrawal">
        <id column="id" property="id"/>
        <result column="type" property="type"/>
        <result column="userDriverId" property="userDriverId"/>
        <result column="code" property="code"/>
        <result column="businessType" property="businessType"/>
        <result column="amount" property="amount"/>
        <result column="state" property="state"/>
        <result column="orderNumber" property="orderNumber"/>
        <result column="createTime" property="createTime"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CommercialMapper.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.agentdriving.driver.modular.system.dao.CommercialMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Commercial">
        <id column="id" property="id"/>
        <result column="type" property="type"/>
        <result column="name" property="name"/>
        <result column="url" property="url"/>
        <result column="device" property="device"/>
        <result column="isJump" property="isJump"/>
        <result column="jumpType" property="jumpType"/>
        <result column="jumpUrl" property="jumpUrl"/>
        <result column="html" property="html"/>
        <result column="sort" property="sort"/>
        <result column="status" property="status"/>
        <result column="createUserId" property="createUserId"/>
        <result column="createTime" property="createTime"/>
        <result column="updateUserId" property="updateUserId"/>
        <result column="updateTime" property="updateTime"/>
    </resultMap>
    <select id="queryCommercialList" resultType="com.agentdriving.driver.modular.system.warpper.CommercialWarpper">
        select
        `name`,
        url,
        `type`,
        isJump,
        jumpType,
        jumpUrl,
        html
        from t_commercial where status = 1
        <if test="null != type">
            and `type` = #{type}
        </if>
        <if test="null != device">
            and device = #{device}
        </if>
        order by sort limit 0, 3
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CommercialUserEjectMapper.xml
New file
@@ -0,0 +1,12 @@
<?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.agentdriving.driver.modular.system.dao.CommercialUserEjectMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.CommercialUserEject">
        <id column="id" property="id"/>
        <result column="userType" property="userType"/>
        <result column="userId" property="userId"/>
        <result column="lastDate" property="lastDate"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/CouponMapper.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.agentdriving.driver.modular.system.dao.CouponMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Coupon">
        <id column="id" property="id"/>
        <result column="agent_id" property="agentId"/>
        <result column="branch_office_id" property="branchOfficeId"/>
        <result column="create_time" property="createTime"/>
        <result column="coupon_name" property="couponName"/>
        <result column="coupon_type" property="couponType"/>
        <result column="coupon_code" property="couponCode"/>
        <result column="coupon_service_type" property="couponServiceType"/>
        <result column="coupon_conditional_amount" property="couponConditionalAmount"/>
        <result column="coupon_preferential_amount" property="couponPreferentialAmount"/>
        <result column="coupon_validity" property="couponValidity"/>
        <result column="coupon_send_quantity" property="couponSendQuantity"/>
        <result column="coupon_state" property="couponState"/>
        <result column="coupon_count" property="couponCount"/>
        <result column="remaining_quantity" property="remainingQuantity"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DeptMapper.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.agentdriving.driver.modular.system.dao.DeptMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Dept">
        <id column="id" property="id"/>
        <result column="num" property="num"/>
        <result column="pid" property="pid"/>
        <result column="pids" property="pids"/>
        <result column="simplename" property="simplename"/>
        <result column="fullname" property="fullname"/>
        <result column="tips" property="tips"/>
        <result column="version" property="version"/>
    </resultMap>
    <select id="tree" resultType="com.agentdriving.driver.core.node.ZTreeNode">
        select id,pid as pId,simplename as name,
        (
        CASE
        WHEN (pId = 0 OR pId IS NULL) THEN
        'true'
        ELSE
        'false'
        END
        ) as isOpen from sys_dept
    </select>
    <select id="list" resultType="map">
        select * from sys_dept
        <if test="condition != null and condition != ''">
            where simplename like CONCAT('%',#{condition},'%') or fullname like CONCAT('%',#{condition},'%')
        </if>
        order by num ASC
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DictMapper.xml
New file
@@ -0,0 +1,42 @@
<?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.agentdriving.driver.modular.system.dao.DictMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Dict">
        <id column="id" property="id"/>
        <result column="num" property="num"/>
        <result column="pid" property="pid"/>
        <result column="name" property="name"/>
        <result column="code" property="code"/>
        <result column="tips" property="tips"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, num, pid, name,code,tips
    </sql>
    <select id="selectByCode" resultType="dict">
        select
        <include refid="Base_Column_List"/>
        from sys_dict
        where code = #{code}
    </select>
    <select id="selectByParentCode" resultType="dict">
        select
        <include refid="Base_Column_List"/>
        from sys_dict
        where pid in(select id  from sys_dict where code = #{code}) order by num asc
    </select>
    <select id="list" resultType="map">
        select * from sys_dict
        where pid = 0
        <if test="condition != null and condition != ''">
            AND name like CONCAT('%',#{condition},'%')
        </if>
        order by id ASC
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DriverBankMapper.xml
New file
@@ -0,0 +1,14 @@
<?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.agentdriving.driver.modular.system.dao.DriverBankMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.DriverBank">
        <id column="id" property="id"/>
        <result column="driverId" property="driverId"/>
        <result column="name" property="name"/>
        <result column="phone" property="phone"/>
        <result column="IDCode" property="IDCode"/>
        <result column="bankNumber" property="bankNumber"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DriverMapper.xml
New file
@@ -0,0 +1,57 @@
<?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.agentdriving.driver.modular.system.dao.DriverMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Driver">
        <id column="id" property="id"/>
        <result column="code" property="code"/>
        <result column="name" property="name"/>
        <result column="avatar" property="avatar"/>
        <result column="phone" property="phone"/>
        <result column="password" property="password"/>
        <result column="sex" property="sex"/>
        <result column="source" property="source"/>
        <result column="emergencyContact" property="emergencyContact"/>
        <result column="emergencyPhone" property="emergencyPhone"/>
        <result column="driverLicenseNumber" property="driverLicenseNumber"/>
        <result column="driverLicense" property="driverLicense"/>
        <result column="firstCertificateTime" property="firstCertificateTime"/>
        <result column="idcard" property="idcard"/>
        <result column="idcardFront" property="idcardFront"/>
        <result column="idcardBack" property="idcardBack"/>
        <result column="inviterType" property="inviterType"/>
        <result column="inviterId" property="inviterId"/>
        <result column="agentId" property="agentId"/>
        <result column="branchOfficeId" property="branchOfficeId"/>
        <result column="balance" property="balance"/>
        <result column="backgroundBalance" property="backgroundBalance"/>
        <result column="couponBalance" property="couponBalance"/>
        <result column="approvalStatus" property="approvalStatus"/>
        <result column="approvalNotes" property="approvalNotes"/>
        <result column="approvalUserId" property="approvalUserId"/>
        <result column="approvalTime" property="approvalTime"/>
        <result column="serverStatus" property="serverStatus"/>
        <result column="integral" property="integral"/>
        <result column="score" property="score"/>
        <result column="status" property="status"/>
        <result column="remark" property="remark"/>
        <result column="isException" property="isException"/>
        <result column="createTime" property="createTime"/>
        <result column="provinceCode" property="provinceCode"/>
        <result column="provinceName" property="provinceName"/>
        <result column="cityCode" property="cityCode"/>
        <result column="cityName" property="cityName"/>
        <result column="areaCode" property="areaCode"/>
        <result column="areaName" property="areaName"/>
        <result column="commission" property="commission"/>
        <result column="wxCollectionCode" property="wxCollectionCode"/>
        <result column="zfbCollectionCode" property="zfbCollectionCode"/>
        <result column="openid" property="openid"/>
        <result column="openOrderQRCode" property="openOrderQRCode"/>
        <result column="merchantNumber" property="merchantNumber"/>
        <result column="merchantName" property="merchantName"/>
        <result column="merchantPhone" property="merchantPhone"/>
        <result column="merchantIDCode" property="merchantIDCode"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/DriverWorkMapper.xml
New file
@@ -0,0 +1,14 @@
<?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.agentdriving.driver.modular.system.dao.DriverWorkMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.DriverWork">
        <id column="id" property="id"/>
        <result column="driverId" property="driverId"/>
        <result column="workTime" property="workTime"/>
        <result column="offWorkTime" property="offWorkTime"/>
        <result column="onlineTime" property="onlineTime"/>
        <result column="status" property="status"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/EditionMapper.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.agentdriving.driver.modular.system.dao.EditionMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Edition">
        <id column="id" property="id"/>
        <result column="editionNo" property="editionNo"/>
        <result column="editionFile" property="editionFile"/>
        <result column="editionAnnouncement" property="editionAnnouncement"/>
        <result column="editionPort" property="editionPort"/>
        <result column="createTime" property="createTime"/>
        <result column="status" property="status"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/ExpenseMapper.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.agentdriving.driver.modular.system.dao.ExpenseMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Expense">
        <id column="id" property="id" />
        <result column="money" property="money" />
        <result column="desc" property="desc" />
        <result column="createtime" property="createtime" />
        <result column="state" property="state" />
        <result column="userid" property="userid" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, money, desc, createtime, state, userid
    </sql>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/HtmlMapper.xml
New file
@@ -0,0 +1,12 @@
<?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.agentdriving.driver.modular.system.dao.HtmlMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Html">
        <id column="id" property="id"/>
        <result column="type" property="type"/>
        <result column="html" property="html"/>
        <result column="createTime" property="createTime"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/ImgMapper.xml
New file
@@ -0,0 +1,12 @@
<?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.agentdriving.driver.modular.system.dao.ImgMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Img">
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="img" property="img" />
        <result column="createTime" property="createTime" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/JoiningRequirementsMapper.xml
New file
@@ -0,0 +1,13 @@
<?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.agentdriving.driver.modular.system.dao.JoiningRequirementsMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.JoiningRequirements">
        <id column="id" property="id" />
        <result column="content" property="content" />
        <result column="sort" property="sort" />
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/LoginLogMapper.xml
New file
@@ -0,0 +1,41 @@
<?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.agentdriving.driver.modular.system.dao.LoginLogMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.LoginLog">
        <id column="id" property="id" />
        <result column="logname" property="logname" />
        <result column="userid" property="userid" />
        <result column="createtime" property="createtime" />
        <result column="succeed" property="succeed" />
        <result column="message" property="message" />
        <result column="ip" property="ip" />
    </resultMap>
    <select id="getLoginLogs" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
        select * from sys_login_log where 1 = 1
        <if test="beginTime != null and beginTime !='' and endTime != null and endTime != ''">
            and (createTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
        </if>
        <if test="logName != null and logName !=''">
            and logname like CONCAT('%',#{logName},'%')
        </if>
        <choose>
            <when test="orderByField != null and orderByField !=''">
                <choose>
                    <when test="isAsc == true">
                        order by ${orderByField} ASC
                    </when>
                    <otherwise>
                        order by ${orderByField} DESC
                    </otherwise>
                </choose>
            </when>
            <otherwise>
                order by createtime DESC
            </otherwise>
        </choose>
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/MainContentMapper.xml
New file
@@ -0,0 +1,13 @@
<?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.agentdriving.driver.modular.system.dao.MainContentMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.MainContent">
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="content" property="content" />
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/MenuMapper.xml
New file
@@ -0,0 +1,177 @@
<?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.agentdriving.driver.modular.system.dao.MenuMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Menu">
        <id column="id" property="id" />
        <result column="code" property="code" />
        <result column="pcode" property="pcode" />
        <result column="pcodes" property="pcodes" />
        <result column="name" property="name" />
        <result column="icon" property="icon" />
        <result column="url" property="url" />
        <result column="num" property="num" />
        <result column="levels" property="levels" />
        <result column="ismenu" property="ismenu" />
        <result column="tips" property="tips" />
        <result column="status" property="status" />
        <result column="isopen" property="isopen" />
    </resultMap>
    <sql id="Base_Column_List">
        id, code, pcode, name, icon, url, num, levels,pcodes,
        tips, status,isopen,ismenu
    </sql>
    <select id="selectMenus" resultType="map">
        select
        <include refid="Base_Column_List" />
        from sys_menu
        where status = 1
        <if test="condition != null and condition != ''">
            and (name like CONCAT('%',#{condition},'%') or code like CONCAT('%',#{condition},'%'))
        </if>
        <if test="level != null and level != ''">
            and levels = #{level}
        </if>
    </select>
    <select id="getMenuIdsByRoleId" resultType="long">
        select menuid from
        sys_relation where roleid = #{roleId}
    </select>
    <select id="menuTreeList" resultType="com.agentdriving.driver.core.node.ZTreeNode">
        SELECT
        m1.id AS id,
        (
        CASE
        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
        0
        ELSE
        m2.id
        END
        ) AS pId,
        m1. NAME
        AS NAME,
        (
        CASE
        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
        'true'
        ELSE
        'false'
        END
        ) as isOpen
        FROM
        sys_menu m1
        LEFT join sys_menu m2 ON m1.pcode = m2. CODE
        ORDER BY
        m1.id ASC
    </select>
    <select id="menuTreeListByMenuIds" resultType="com.agentdriving.driver.core.node.ZTreeNode">
        SELECT
        m1.id AS id,
        (
        CASE
        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
        0
        ELSE
        m2.id
        END
        ) AS pId,
        m1. NAME AS NAME,
        (
        CASE
        WHEN (m2.id = 0 OR m2.id IS
        NULL) THEN
        'true'
        ELSE
        'false'
        END
        ) as isOpen,
        (
        CASE
        WHEN (m3.ID = 0 OR m3.ID
        IS NULL) THEN
        'false'
        ELSE
        'true'
        END
        ) "checked"
        FROM
        sys_menu m1
        LEFT JOIN
        sys_menu m2
        ON m1.pcode = m2. CODE
        left join (
        SELECT
        ID
        FROM
        sys_menu
        WHERE
        ID IN
        <foreach collection="list" index="index" item="i" open="("
                 separator="," close=")">
            #{i}
        </foreach>
        ) m3 on m1.id = m3.id
        ORDER BY
        m1.id ASC
    </select>
    <delete id="deleteRelationByMenu">
        delete from sys_relation where menuid = #{menuId}
    </delete>
    <select id="getResUrlsByRoleId" resultType="string">
        select url from
        sys_relation rel
        inner join sys_menu m on rel.menuid = m.id
        where rel.roleid = #{roleId}
    </select>
    <select id="getMenusByRoleIds" resultType="com.agentdriving.driver.core.node.MenuNode">
        SELECT
        m1.id AS id,
        m1.icon AS icon,
        (
        CASE
        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
        0
        ELSE
        m2.id
        END
        ) AS parentId,
        m1.NAME as name,
        m1.url as url,
        m1.levels as levels,
        m1.ismenu as ismenu,
        m1.num as num
        FROM
        sys_menu m1
        LEFT join sys_menu m2 ON m1.pcode = m2. CODE
        INNER JOIN (
        SELECT
        ID
        FROM
        sys_menu
        WHERE
        ID IN (
        SELECT
        menuid
        FROM
        sys_relation rela
        WHERE
        rela.roleid IN
        <foreach collection="list" index="index" item="i" open="(" separator="," close=")">
            #{i}
        </foreach>
        )
        ) m3 ON m1.id = m3.id
        where m1.ismenu = 1
        order by levels,num asc
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/NoticeMapper.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.agentdriving.driver.modular.system.dao.NoticeMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Notice">
        <id column="id" property="id"/>
        <result column="title" property="title"/>
        <result column="type" property="type"/>
        <result column="content" property="content"/>
        <result column="createtime" property="createtime"/>
        <result column="creater" property="creater"/>
    </resultMap>
    <select id="list" resultType="map">
        select * from sys_notice
        <if test="condition != null and condition != ''">
            where title like CONCAT('%',#{condition},'%') or content like CONCAT('%',#{condition},'%')
        </if>
        order by createtime DESC
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OperationLogMapper.xml
New file
@@ -0,0 +1,46 @@
<?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.agentdriving.driver.modular.system.dao.OperationLogMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.OperationLog">
        <id column="id" property="id" />
        <result column="logtype" property="logtype" />
        <result column="logname" property="logname" />
        <result column="userid" property="userid" />
        <result column="classname" property="classname" />
        <result column="method" property="method" />
        <result column="createtime" property="createtime" />
        <result column="succeed" property="succeed" />
        <result column="message" property="message" />
    </resultMap>
    <select id="getOperationLogs" resultType="map">
        select * from sys_operation_log where 1 = 1
        <if test="beginTime != null and beginTime !='' and endTime != null and endTime != ''">
            and (createTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
        </if>
        <if test="logName != null and logName !=''">
            and logname like CONCAT('%',#{logName},'%')
        </if>
        <if test="logType != null and logType !=''">
            and logtype like CONCAT('%',#{logType},'%')
        </if>
        <choose>
            <when test="orderByField != null and orderByField !=''">
                <choose>
                    <when test="isAsc == true">
                        order by ${orderByField} ASC
                    </when>
                    <otherwise>
                        order by ${orderByField} DESC
                    </otherwise>
                </choose>
            </when>
            <otherwise>
                order by createtime DESC
            </otherwise>
        </choose>
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OrderMapper.xml
New file
@@ -0,0 +1,219 @@
<?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.agentdriving.driver.modular.system.dao.OrderMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Order">
        <id column="id" property="id" />
        <result column="code" property="code" />
        <result column="userId" property="userId" />
        <result column="userPhone" property="userPhone" />
        <result column="userName" property="userName" />
        <result column="driverId" property="driverId" />
        <result column="source" property="source" />
        <result column="agentId" property="agentId" />
        <result column="branchOfficeId" property="branchOfficeId" />
        <result column="orderTakingTime" property="orderTakingTime"/>
        <result column="goToAppointmentPointTime" property="goToAppointmentPointTime"/>
        <result column="arrivalTimeAtTheAppointmentPoint" property="arrivalTimeAtTheAppointmentPoint"/>
        <result column="startTime" property="startTime" />
        <result column="startAddress" property="startAddress" />
        <result column="startLat" property="startLat" />
        <result column="startLng" property="startLng" />
        <result column="endAddress" property="endAddress" />
        <result column="endLat" property="endLat" />
        <result column="endLng" property="endLng" />
        <result column="boardingTime" property="boardingTime" />
        <result column="getoffTime" property="getoffTime" />
        <result column="startDistance" property="startDistance" />
        <result column="startPrice" property="startPrice" />
        <result column="overDriveDistance" property="overDriveDistance" />
        <result column="overDrivePrice" property="overDrivePrice" />
        <result column="longDistance" property="longDistance" />
        <result column="longDistancePrice" property="longDistancePrice" />
        <result column="overLongDistance" property="overLongDistance" />
        <result column="overLongDistancePrice" property="overLongDistancePrice" />
        <result column="waitTime" property="waitTime" />
        <result column="waitTimePrice" property="waitTimePrice" />
        <result column="outWaitTime" property="outWaitTime" />
        <result column="outWaitTimePrice" property="outWaitTimePrice" />
        <result column="badWeatherDistance" property="badWeatherDistance" />
        <result column="badWeatherPrice" property="badWeatherPrice" />
        <result column="overBadWeatherDistance" property="overBadWeatherDistance" />
        <result column="overBadWeatherPrice" property="overBadWeatherPrice" />
        <result column="weather" property="weather"/>
        <result column="estimatedPrice" property="estimatedPrice" />
        <result column="estimatedMileage" property="estimatedMileage"/>
        <result column="orderMoney" property="orderMoney" />
        <result column="actualMileage" property="actualMileage"/>
        <result column="payMoney" property="payMoney" />
        <result column="discountedPrice" property="discountedPrice" />
        <result column="couponId" property="couponId" />
        <result column="discountAmount" property="discountAmount"/>
        <result column="discount" property="discount"/>
        <result column="payType" property="payType" />
        <result column="payTime" property="payTime" />
        <result column="hallOrder" property="hallOrder"/>
        <result column="startWaitTime" property="startWaitTime"/>
        <result column="state" property="state" />
        <result column="oldState" property="oldState"/>
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
        <result column="routeRecord" property="routeRecord"/>
    </resultMap>
    <select id="queryOrderHall" resultType="com.agentdriving.driver.modular.system.warpper.HallOrderList">
        select
        a.id,
        b.avatar,
        a.userName,
        a.userPhone,
        (select count(1) from t_order where userId = a.userId and state in (107, 108, 109)) as orderTimes,
        (select count(1) from t_order where userId = a.userId and state in (301)) as cancelTimes,
        a.source,
        UNIX_TIMESTAMP(a.createTime) * 1000 as createTime,
        a.startAddress,
        a.startLat,
        a.startLng,
        a.endAddress,
        a.endLat,
        a.endLng,
        a.estimatedPrice,
        a.estimatedMileage,
        a.startPrice
        from t_order a
        left join t_app_user b on (a.userId = b.id)
        where a.`status` = 1 and a.hallOrder = 1 and a.state in (101, 201) order by a.createTime desc
    </select>
    <select id="queryOrderInfo" resultType="com.agentdriving.driver.modular.system.warpper.OrderInfoWarpper">
        select
        a.id,
        b.id as userId,
        b.avatar,
        a.userName,
        a.userPhone,
        (select count(1) from t_order where userId = a.userId and state in (107, 108, 109)) as orderTimes,
        (select count(1) from t_order where userId = a.userId and state in (301)) as cancelTimes,
        a.source,
        UNIX_TIMESTAMP(a.createTime) * 1000 as createTime,
        a.startAddress,
        a.startLat,
        a.startLng,
        a.endAddress,
        a.endLat,
        a.endLng,
        a.estimatedPrice,
        a.estimatedMileage,
        a.estimatedTime,
        a.startPrice,
        a.waitTime,
        a.actualMileage,
        a.state,
        (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(a.startTime)) / 60 as travelTime
        from t_order a
        left join t_app_user b on (a.userId = b.id)
        where a.id = #{orderId}
    </select>
    <select id="queryDriverOrderList" resultType="com.agentdriving.driver.modular.system.warpper.DriverOrderListWarpper">
        select
        id,
        '芳华代驾订单' as title,
        UNIX_TIMESTAMP(createTime) * 1000 as createTime,
        startAddress,
        endAddress,
        state,
        source
        from t_order where status = 1 and driverId = #{driverId}
        <if test="null != state and 107 == state">
            and state = #{state}
        </if>
        <if test="null != state and 109 == state">
            and state in (108, 109)
        </if>
        <if test="null != state and 301 == state">
            and state = #{state}
        </if>
        order by createTime desc limit #{pageNum}, #{pageSize}
    </select>
    <select id="queryInviteList" resultType="com.agentdriving.driver.modular.system.warpper.InviteListWarpper">
        select * from (
        select
        a.id,
        a.nickname,
        min(UNIX_TIMESTAMP(b.createTime) * 1000) as time,
        1 as type
        from t_app_user a
        left join t_order b on (a.id = b.userId)
        where a.`status` = 1 and a.inviterType = 2 and a.inviterId = #{driverId}
        <if test="null != time and '' != time">
            and DATE_FORMAT(b.createTime, '%Y年%m月') = #{time}
        </if>
        group by a.id, a.nickname
        union all
        select
        a.id,
        a.`name`,
        min(UNIX_TIMESTAMP(b.createTime) * 1000) as time,
        2 as type
        from t_driver a
        left join t_order b on (a.id = b.driverId)
        where a.`status` = 1 and a.approvalStatus = 2 and a.inviterType = 2 and a.inviterId = #{driverId}
        <if test="null != time and '' != time">
            and DATE_FORMAT(b.createTime, '%Y年%m月') = #{time}
        </if>
        group by a.id, a.`name`
        ) as aa where aa.time is not null order by aa.time desc limit #{pageNum}, #{pageSize}
    </select>
    <select id="queryDriverRank" resultType="com.agentdriving.driver.modular.system.warpper.PerformanceRankingWarpper">
        select
        aa.driverId,
        @ROW :=@ROW + 1 as rank,
        aa.name,
        UNIX_TIMESTAMP(aa.createTime) * 1000 as createTime,
        aa.number as amountOfData
        from (
            select
            a.driverId,
            b.`name`,
            MAX(a.createTime) as createTime,
            count(1) as number
            from t_order a
            left join t_driver b on (a.driverId = b.id)
            where a.state in (107, 108, 109) and a.`status` = 1
            <if test="null != dayType and 1 == dayType"><!--天-->
                <if test="null != time and '' != time">
                    and DATE_FORMAT(a.createTime, '%Y年%m月%d日') = #{time}
                </if>
            </if>
            <if test="null != dayType and 2 == dayType"><!--月-->
                <if test="null != time and '' != time">
                    and DATE_FORMAT(a.createTime, '%Y年%m月') = #{time}
                </if>
            </if>
            <if test="null != dayType and 3 == dayType"><!--年-->
                <if test="null != time and '' != time">
                    and DATE_FORMAT(a.createTime, '%Y年') = #{time}
                </if>
            </if>
            group by a.driverId,b.`name`
        ) as aa,( SELECT @ROW := 0 ) AS itable order by aa.number desc
    </select>
    <update id="completeCollection">
        update t_order set state = 108 where state = 107 and status = 1 and payType = 3
    </update>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OrderRefusalMapepr.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.agentdriving.driver.modular.system.dao.OrderRefusalMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.OrderRefusal">
        <id column="id" property="id" />
        <result column="order_id" property="orderId" />
        <result column="driver_id" property="driverId" />
        <result column="startAddress" property="startAddress" />
        <result column="endAddress" property="endAddress" />
        <result column="code" property="code" />
        <result column="createTime" property="createTime" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/OrderTransferMapper.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.agentdriving.driver.modular.system.dao.OrderTransferMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.OrderTransfer">
        <id column="id" property="id" />
        <result column="orderId" property="orderId" />
        <result column="oldDriverId" property="oldDriverId" />
        <result column="newDriverId" property="newDriverId" />
        <result column="cause" property="cause"/>
        <result column="status" property="status" />
        <result column="successTime" property="successTime" />
        <result column="createTime" property="createTime" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RechargeRecordMapper.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.agentdriving.driver.modular.system.dao.RechargeRecordMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.RechargeRecord">
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="userId" property="userId" />
        <result column="code" property="code" />
        <result column="amount" property="amount"/>
        <result column="payType" property="payType" />
        <result column="payTime" property="payTime" />
        <result column="payStatus" property="payStatus" />
        <result column="orderNumber" property="orderNumber" />
        <result column="createTime" property="createTime" />
        <result column="agentId" property="agentId" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RelationMapper.xml
New file
@@ -0,0 +1,12 @@
<?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.agentdriving.driver.modular.system.dao.RelationMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Relation">
        <id column="id" property="id" />
        <result column="menuid" property="menuid" />
        <result column="roleid" property="roleid" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RevenueMapper.xml
New file
@@ -0,0 +1,60 @@
<?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.agentdriving.driver.modular.system.dao.RevenueMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Revenue">
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="userType" property="userType" />
        <result column="userId" property="userId" />
        <result column="orderId" property="orderId" />
        <result column="amount" property="amount" />
        <result column="balance" property="balance"/>
        <result column="createTime" property="createTime" />
    </resultMap>
    <select id="queryTotalAmount" resultType="double">
        select sum(amount) as amount from t_revenue where userType = 2 and userId = #{driverId}
    </select>
    <select id="queryDriverRank" resultType="com.agentdriving.driver.modular.system.warpper.PerformanceRankingWarpper">
        select
        aa.driverId,
        @ROW :=@ROW + 1 as rank,
        aa.`name`,
        UNIX_TIMESTAMP(aa.createTime) * 1000 as createTime,
        aa.number as amountOfData
        from (
        select
        a.userId as driverId,
        b.`name`,
        MAX(a.createTime) as createTime,
        sum(a.amount) as number
        from t_revenue a
        left join t_driver b on (a.userId = b.id)
        where a.userType = 2
        <if test="null != type">
            and a.type = #{type}
        </if>
        <if test="null != dayType and 1 == dayType"><!--天-->
            <if test="null != time and '' != time">
                and DATE_FORMAT(a.createTime, '%Y年%m月%d日') = #{time}
            </if>
        </if>
        <if test="null != dayType and 2 == dayType"><!--月-->
            <if test="null != time and '' != time">
                and DATE_FORMAT(a.createTime, '%Y年%m月') = #{time}
            </if>
        </if>
        <if test="null != dayType and 3 == dayType"><!--年-->
            <if test="null != time and '' != time">
                and DATE_FORMAT(a.createTime, '%Y年') = #{time}
            </if>
        </if>
        group by a.userId,b.`name`
        ) as aa,( SELECT @ROW := 0 ) AS itable order by aa.number desc
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/RoleMapper.xml
New file
@@ -0,0 +1,79 @@
<?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.agentdriving.driver.modular.system.dao.RoleMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.Role">
        <id column="id" property="id" />
        <result column="num" property="num" />
        <result column="pid" property="pid" />
        <result column="name" property="name" />
        <result column="deptid" property="deptid" />
        <result column="tips" property="tips" />
        <result column="version" property="version" />
    </resultMap>
    <sql id="Base_Column_List">
        id, num, pid, name, deptid, tips, version
    </sql>
    <select id="selectRoles" resultType="map">
        select
        <include refid="Base_Column_List" />
        from sys_role
        <if test="condition != null">
            where name like CONCAT('%',#{condition},'%')
        </if>
    </select>
    <delete id="deleteRolesById">
        delete from sys_relation where roleid = #{roleId}
    </delete>
    <select id="roleTreeList" resultType="com.agentdriving.driver.core.node.ZTreeNode">
        select id "id",pId
        "pId",name as "name",(case when (pId=0 or pId is null) then 'true'
        else 'false' end) "open" from sys_role
    </select>
    <select id="roleTreeListByRoleId" resultType="com.agentdriving.driver.core.node.ZTreeNode">
        SELECT
        r.id "id",
        pId "pId",
        NAME AS "name",
        (
        CASE
        WHEN (pId = 0 OR pId IS NULL) THEN
        'true'
        ELSE
        'false'
        END
        ) "open",
        (
        CASE
        WHEN (r1.ID = 0 OR r1.ID IS NULL) THEN
        'false'
        ELSE
        'true'
        END
        ) "checked"
        FROM
        sys_role r
        LEFT JOIN (
        SELECT
        ID
        FROM
        sys_role
        WHERE
        ID IN
        <foreach collection="array" index="index" item="i" open="(" separator="," close=")">
            #{i}
        </foreach>
        ) r1 ON r.ID = r1.ID
        ORDER BY
        pId,
        num ASC
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemBulletinMapper.xml
New file
@@ -0,0 +1,38 @@
<?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.agentdriving.driver.modular.system.dao.SystemBulletinMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.SystemBulletin">
        <id column="id" property="id" />
        <result column="introduce" property="introduce" />
        <result column="img" property="img" />
        <result column="content" property="content" />
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
    </resultMap>
    <select id="querySystemBulletinList" resultType="com.agentdriving.driver.modular.system.warpper.SystemBulletinListWarpper">
        select
        b.id,
        a.introduce,
        a.img,
        b.isRead,
        (UNIX_TIMESTAMP(b.createTime) * 1000) as createTime
        from t_system_bulletin a
        left join t_system_bulletin_user b on (a.id = b.systemBulletinId)
        where b.status = 1 and b.userType = 2 and b.userId = #{uid} order by b.createTime desc limit #{pageNum}, #{size}
    </select>
    <select id="querySystemBulletinInfo" resultType="com.agentdriving.driver.modular.system.warpper.SystemBulletinInfo">
        select
        b.id,
        a.content
        from t_system_bulletin a
        left join t_system_bulletin_user b on (a.id = b.systemBulletinId)
        where b.id = #{id}
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemBulletinUserMapper.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.agentdriving.driver.modular.system.dao.SystemBulletinUserMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.SystemBulletinUser">
        <id column="id" property="id" />
        <result column="systemBulletinId" property="systemBulletinId" />
        <result column="userType" property="userType" />
        <result column="userId" property="userId" />
        <result column="isRead" property="isRead" />
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
    </resultMap>
    <update id="clearSystemBulletinUser">
        update t_system_bulletin_user set status = 3 where userType = 2 and userId = #{userId}
    </update>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemConfigMapper.xml
New file
@@ -0,0 +1,11 @@
<?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.agentdriving.driver.modular.system.dao.SystemConfigMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.SystemConfig">
        <id column="id" property="id"/>
        <result column="type" property="type"/>
        <result column="content" property="content"/>
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/SystemMessageMapper.xml
New file
@@ -0,0 +1,40 @@
<?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.agentdriving.driver.modular.system.dao.SystemMessageMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.SystemMessage">
        <id column="id" property="id" />
        <result column="userType" property="userType" />
        <result column="userId" property="userId" />
        <result column="title" property="title" />
        <result column="content" property="content" />
        <result column="isRead" property="isRead" />
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
    </resultMap>
    <select id="querySystemMessageList" resultType="com.agentdriving.driver.modular.system.warpper.SystemMessageWarpper">
        select
        id,
        title,
        content,
        isRead,
        (UNIX_TIMESTAMP(createTime) * 1000) as createTime
        from t_system_message where status = 1
        <if test="null != uid">
            and userType = 2 and userId = #{uid}
        </if>
        order by createTime desc
        <if test="null != pageNum and null != size">
            limit #{pageNum}, #{size}
        </if>
    </select>
    <update id="clearSystemMessage">
        update t_system_message set status = 3 where userType = 2 and userId = #{userId}
    </update>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/UserMapper.xml
New file
@@ -0,0 +1,77 @@
<?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.agentdriving.driver.modular.system.dao.UserMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.User">
        <id column="id" property="id" />
        <result column="avatar" property="avatar" />
        <result column="account" property="account" />
        <result column="password" property="password" />
        <result column="salt" property="salt" />
        <result column="name" property="name" />
        <result column="birthday" property="birthday" />
        <result column="sex" property="sex" />
        <result column="email" property="email" />
        <result column="phone" property="phone" />
        <result column="roleid" property="roleid" />
        <result column="deptid" property="deptid" />
        <result column="status" property="status" />
        <result column="createtime" property="createtime" />
        <result column="version" property="version" />
    </resultMap>
    <sql id="Base_Column_List">
        id, account, name, birthday, sex, email, avatar,
        phone, roleid,
        deptid, status,
        createtime, version
    </sql>
    <sql id="Base_Column_List_With_Pwd">
        id, account, name, birthday,password, sex, email, avatar,
        phone, roleid,salt,
        deptid, status,
        createtime, version
    </sql>
    <select id="selectUsers" resultType="map">
        select
        <include refid="Base_Column_List" />
        from sys_user
        where status != 3
        <if test="name != null and name != ''">
            and (phone like CONCAT('%',#{name},'%')
            or account like CONCAT('%',#{name},'%')
            or name like CONCAT('%',#{name},'%'))
        </if>
        <if test="deptid != null and deptid != 0">
            and (deptid = #{deptid} or deptid in ( select id from sys_dept where pids like CONCAT('%[', #{deptid}, ']%') ))
        </if>
        <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
            and (createTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
        </if>
    </select>
    <update id="setStatus">
        update sys_user set status = #{status} where id =
        #{userId}
    </update>
    <update id="changePwd">
        update sys_user set password = #{pwd} where id =
        #{userId}
    </update>
    <update id="setRoles">
        update sys_user set roleid = #{roleIds} where id =
        #{userId}
    </update>
    <select id="getByAccount" resultType="user">
        select
        <include refid="Base_Column_List_With_Pwd" />
        from sys_user where account = #{account} and status != 3
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/UserToCouponMapper.xml
New file
@@ -0,0 +1,44 @@
<?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.agentdriving.driver.modular.system.dao.UserToCouponMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.UserToCoupon">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="couponId" property="couponId" />
        <result column="couponTotal" property="couponTotal" />
        <result column="validCount" property="validCount" />
        <result column="expireCount" property="expireCount" />
        <result column="expireTime" property="expireTime" />
        <result column="createTime" property="createTime" />
        <result column="status" property="status" />
    </resultMap>
    <select id="queryCoupon" resultType="com.agentdriving.driver.modular.system.model.Coupon">
        select
        b.id,
        a.agent_id as agentId,
        a.branch_office_id as branchOfficeId,
        a.create_time as createTime,
        a.coupon_name as couponName,
        a.coupon_type as couponType,
        a.coupon_code as couponCode,
        a.coupon_service_type as couponServiceType,
        a.coupon_conditional_amount as couponConditionalAmount,
        a.coupon_preferential_amount as couponPreferentialAmount,
        a.coupon_validity as couponValidity,
        a.coupon_send_quantity as couponSendQuantity,
        a.coupon_state as couponState,
        a.coupon_count as couponCount,
        a.remaining_quantity as remainingQuantity
        from t_coupon a
        left join t_user_to_coupon b on (a.id = b.couponId)
        where b.status = 1 and b.expireTime > now() and b.validCount &gt; 0
        and b.userId = #{uid} and a.coupon_conditional_amount &lt;= #{price} and a.coupon_preferential_amount &lt; #{price}
        order by a.coupon_preferential_amount desc limit 0, 1
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/WeatherCityMapper.xml
New file
@@ -0,0 +1,12 @@
<?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.agentdriving.driver.modular.system.dao.WeatherCityMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.WeatherCity">
        <id column="id" property="id" />
        <result column="province" property="province" />
        <result column="city" property="city" />
        <result column="district" property="district" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/YouTuiDriverMapper.xml
New file
@@ -0,0 +1,70 @@
<?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.agentdriving.driver.modular.system.dao.YouTuiDriverMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.YouTuiDriver">
        <id column="id" property="id" />
        <result column="driverId" property="driverId" />
        <result column="youTuiId" property="youTuiId" />
        <result column="integral" property="integral" />
        <result column="type" property="type"/>
        <result column="surplusQuantity" property="surplusQuantity"/>
        <result column="endTime" property="endTime"/>
        <result column="state" property="state"/>
        <result column="failureTime" property="failureTime" />
        <result column="createTime" property="createTime" />
    </resultMap>
    <select id="queryRedemptionDate" resultType="map">
        select DATE_FORMAT(aa.createTime, '%Y年%m月') as createTime from (select createTime from t_you_tui_driver where driverId = #{driverId} order by createTime desc) as aa group by DATE_FORMAT(aa.createTime, '%Y年%m月')
    </select>
    <select id="queryYouTuiDriverList" resultType="com.agentdriving.driver.modular.system.warpper.DriverYouTuiWarpper">
        select
        b.`name`,
        b.integral,
        UNIX_TIMESTAMP(a.createTime) * 1000 as createTime,
        a.state
        from t_you_tui_driver a
        left join t_you_tui b on (a.youTuiId  = b.id)
        where a.driverId = #{driverId}
        <if test="null != createTime and  '' != createTime">
            and DATE_FORMAT(a.createTime, '%Y年%m月') = #{createTime}
        </if>
        order by a.createTime desc
    </select>
    <select id="queryDriverYouTui" resultType="com.agentdriving.driver.modular.system.warpper.DriverYouTuiWarpper">
        select
        a.id,
        b.`name`,
        b.type,
        b.number,
        b.img,
        b.integral,
        b.content,
        UNIX_TIMESTAMP(a.createTime) * 1000 as createTime,
        a.state
        from t_you_tui_driver a
        left join t_you_tui b on (a.youTuiId  = b.id)
        where a.driverId = #{driverId} order by a.createTime desc limit #{pageNum}, #{pageSize}
    </select>
    <select id="queryAllYouTui" resultType="com.agentdriving.driver.modular.system.warpper.DriverYouTuiWarpper">
        select
        id,
        `name`,
        type,
        number,
        img,
        integral,
        content
        from t_you_tui where status = 1 order by createTime desc limit #{pageNum}, #{pageSize}
    </select>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/dao/mapping/YouTuiMapper.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.agentdriving.driver.modular.system.dao.YouTuiMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.agentdriving.driver.modular.system.model.YouTui">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="type" property="type" />
        <result column="img" property="img" />
        <result column="number" property="number"/>
        <result column="integral" property="integral"/>
        <result column="effectiveTime" property="effectiveTime"/>
        <result column="content" property="content"/>
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
        <result column="distance" property="distance" />
    </resultMap>
</mapper>
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/factory/UserFactory.java
New file
@@ -0,0 +1,54 @@
package com.agentdriving.driver.modular.system.factory;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.model.User;
import com.agentdriving.driver.modular.system.transfer.UserDto;
import org.springframework.beans.BeanUtils;
/**
 * 用户创建工厂
 *
 * @author fengshuonan
 * @date 2017-05-05 22:43
 */
public class UserFactory {
    public static User createUser(UserDto userDto) {
        if (userDto == null) {
            return null;
        } else {
            User user = new User();
            BeanUtils.copyProperties(userDto, user);
            return user;
        }
    }
    public static User editUser(UserDto newUser, User oldUser) {
        if (newUser == null || oldUser == null) {
            return oldUser;
        } else {
            if (ToolUtil.isNotEmpty(newUser.getAvatar())) {
                oldUser.setAvatar(newUser.getAvatar());
            }
            if (ToolUtil.isNotEmpty(newUser.getName())) {
                oldUser.setName(newUser.getName());
            }
            if (ToolUtil.isNotEmpty(newUser.getBirthday())) {
                oldUser.setBirthday(newUser.getBirthday());
            }
            if (ToolUtil.isNotEmpty(newUser.getDeptid())) {
                oldUser.setDeptid(newUser.getDeptid());
            }
            if (ToolUtil.isNotEmpty(newUser.getSex())) {
                oldUser.setSex(newUser.getSex());
            }
            if (ToolUtil.isNotEmpty(newUser.getEmail())) {
                oldUser.setEmail(newUser.getEmail());
            }
            if (ToolUtil.isNotEmpty(newUser.getPhone())) {
                oldUser.setPhone(newUser.getPhone());
            }
            return oldUser;
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/AccountChangeDetail.java
New file
@@ -0,0 +1,75 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * 账户变动记录
 * @author zhibing.pu
 * @date 2023/3/4 11:30
 */
@Data
@TableName("t_account_change_detail")
public class AccountChangeDetail {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 编号
     */
    @TableField("code")
    private String code;
    /**
     * 用户类型(1=用户,2=司机)
     */
    @TableField("userType")
    private Integer userType;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 类型(1=余额,2=积分)
     */
    @TableField("type")
    private Integer type;
    /**
     * 变动类型(1=订单收入,2=订单支出,3=充值,4=提现,5=佣金收入,6=佣金提现,7=优惠券收入,8=保险支付,9=线下收款支付)
     */
    @TableField("changeType")
    private Integer changeType;
    /**
     * 历史数据
     */
    @TableField("oldData")
    private Double oldData;
    /**
     * 新数据
     */
    @TableField("newData")
    private Double newData;
    /**
     * 订单id
     */
    @TableField("orderId")
    private Long orderId;
    /**
     * 变动说明
     */
    @TableField("explain")
    private String explain;
    /**
     * 变动时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Agent.java
New file
@@ -0,0 +1,85 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * 代理商
 * @author zhibing.pu
 * @date 2023/3/22 22:29
 */
@Data
@TableName("t_agent")
public class Agent {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 负责人姓名
     */
    @TableField("principal")
    private String principal;
    /**
     * 负责人电话
     */
    @TableField("principalPhone")
    private String principalPhone;
    /**
     * 邮箱
     */
    @TableField("email")
    private String email;
    /**
     * 代理区域省名称
     */
    @TableField("provinceName")
    private String provinceName;
    /**
     * 代理区域省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 代理区域市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 代理区域市名称
     */
    @TableField("cityName")
    private String cityName;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 开户银行
     */
    @TableField("bankDeposit")
    private String bankDeposit;
    /**
     * 银行账号
     */
    @TableField("bankAccount")
    private String bankAccount;
    /**
     * 客服电话
     */
    @TableField("serviceCalls")
    private String serviceCalls;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/AppUser.java
New file
@@ -0,0 +1,116 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 用户
* @author pzb
* @Date 2023/2/17 12:08
*/
@Data
@TableName("t_app_user")
public class AppUser {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 用户昵称
     */
    @TableField("nickname")
    private String nickname;
    /**
     * 手机号
     */
    @TableField("phone")
    private String phone;
    /**
     * 性别(1=男,2=女)
     */
    @TableField("sex")
    private Integer sex;
    /**
     * 头像
     */
    @TableField("avatar")
    private String avatar;
    /**
     * 微信openid
     */
    @TableField("openid")
    private String openid;
    /**
     * 微信unionid
     */
    @TableField("unionid")
    private String unionid;
    /**
     * 紧急联系人
     */
    @TableField("emergencyContact")
    private String emergencyContact;
    /**
     * 紧急联系人电话
     */
    @TableField("emergencyPhone")
    private String emergencyPhone;
    /**
     * 账户余额
     */
    @TableField("accountBalance")
    private Double accountBalance;
    /**
     * 用户标签id
     */
    @TableField("userTagId")
    private Integer userTagId;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 是否异常 1正常 0异常
     */
    @TableField("is_exception")
    private Integer isException;
    /**
     * 启用/冻结理由
     */
    @TableField("remark")
    private String remark;
    /**
     * 邀约人类型(1=用户,2=司机)
     */
    @TableField("inviterType")
    private Integer inviterType;
    /**
     * 邀约人id
     */
    @TableField("inviterId")
    private Integer inviterId;
    /**
     * 取消订单次数,取消一次加一,若成功接单清零
     */
    @TableField("cancelCount")
    private Integer cancelCount;
    /**
     * 是否拥有9折优惠 1是 0否
     */
    @TableField("havDiscount")
    private Integer havDiscount;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/BranchOffice.java
New file
@@ -0,0 +1,85 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 分公司实体
* @author pzb
* @Date 2023/2/3 14:13
*/
@Data
@TableName("t_branch_office")
public class BranchOffice {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 代理商id
     */
    @TableField("agentId")
    private Integer agentId;
    /**
     * 负责人姓名
     */
    @TableField("principal")
    private String principal;
    /**
     * 负责人电话
     */
    @TableField("principalPhone")
    private String principalPhone;
    /**
     * 邮箱
     */
    @TableField("email")
    private String email;
    /**
     * 代理区域省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 代理区域省名称
     */
    @TableField("provinceName")
    private String provinceName;
    /**
     * 代理区域市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 代理区域市名称
     */
    @TableField("cityName")
    private String cityName;
    /**
     * 代理区域区编号
     */
    @TableField("districtCode")
    private String districtCode;
    /**
     * 代理区域区名称
     */
    @TableField("districtName")
    private String districtName;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/CancelOrder.java
New file
@@ -0,0 +1,55 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 订单取消记录
* @author pzb
* @Date 2023/2/25 14:37
*/
@Data
@TableName("t_cancel_order")
public class CancelOrder {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 订单id
     */
    @TableField("orderId")
    private Long orderId;
    /**
     * 用户类型(1=用户,2=司机)
     */
    @TableField("userType")
    private Integer userType;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 取消原因
     */
    @TableField("cause")
    private String cause;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/CashWithdrawal.java
New file
@@ -0,0 +1,64 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/18 16:58
 */
@Data
@TableName("t_cash_withdrawal")
public class CashWithdrawal {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 类型(1=用户,2=司机)
     */
    @TableField("type")
    private Integer type;
    /**
     * 用户司机id
     */
    @TableField("userDriverId")
    private Integer userDriverId;
    /**
     * 提现编号
     */
    @TableField("code")
    private String code;
    /**
     * 交易类型 11佣金提现 12余额提现
     */
    @TableField("businessType")
    private Integer businessType;
    /**
     * 提现金额
     */
    @TableField("amount")
    private Double amount;
    /**
     * 提现状态 1未成功 2成功
     */
    @TableField("state")
    private Integer state;
    /**
     * 第三方提现流水号
     */
    @TableField("orderNumber")
    private String orderNumber;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Commercial.java
New file
@@ -0,0 +1,93 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * 广告实体类
 */
@Data
@TableName("t_commercial")
public class Commercial {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 类型(1=弹窗广告,2=底部广告)
     */
    @TableField("type")
    private Integer type;
    /**
     * 广告名称
     */
    @TableField("name")
    private String name;
    /**
     * 广告
     */
    @TableField("url")
    private String url;
    /**
     * 设备(1=小程序,2=司机端)
     */
    @TableField("device")
    private Integer device;
    /**
     * 是否跳转(0=否,1=是)
     */
    @TableField("isJump")
    private Integer isJump;
    /**
     * 跳转类型(1=内部跳转,2=外部跳转)
     */
    @TableField("jumpType")
    private Integer jumpType;
    /**
     * 跳转链接
     */
    @TableField("jumpUrl")
    private String jumpUrl;
    /**
     * 富文本内容
     */
    @TableField("html")
    private String html;
    /**
     * 排序
     */
    @TableField("sort")
    private Integer sort;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加人员id
     */
    @TableField("createUserId")
    private Integer createUserId;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 修改人员id
     */
    @TableField("updateUserId")
    private Integer updateUserId;
    /**
     * 修改时间
     */
    @TableField("updateTime")
    private Date updateTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/CommercialUserEject.java
New file
@@ -0,0 +1,38 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * 用户弹框广告记录
 */
@Data
@TableName("t_commercial_user_eject")
public class CommercialUserEject{
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.INPUT)
    @TableField("id")
    private Long id;
    /**
     * 用户类型(1=用户,2=司机)
     */
    @TableField("userType")
    private Integer userType;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 最后弹出日期
     */
    @TableField("lastDate")
    private Date lastDate;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Coupon.java
New file
@@ -0,0 +1,95 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 优惠券
* @author pzb
* @Date 2023/2/28 11:57
*/
@Data
@TableName("t_coupon")
public class Coupon {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 代理商id
     */
    @TableField("agent_id")
    private Integer agentId;
    /**
     * 分公司id
     */
    @TableField("branch_office_id")
    private Integer branchOfficeId;
    /**
     * 创建时间
     */
    @TableField("create_time")
    private Date createTime;
    /**
     * 优惠券名称
     */
    @TableField("coupon_name")
    private String couponName;
    /**
     * 优惠券类型 1活动券 2新人券
     */
    @TableField("coupon_type")
    private Integer couponType;
    /**
     * 优惠券码
     */
    @TableField("coupon_code")
    private String couponCode;
    /**
     * 服务类型 1通用券
     */
    @TableField("coupon_service_type")
    private Integer couponServiceType;
    /**
     * 条件金额
     */
    @TableField("coupon_conditional_amount")
    private Double couponConditionalAmount;
    /**
     * 优惠金额
     */
    @TableField("coupon_preferential_amount")
    private Double couponPreferentialAmount;
    /**
     * 有效期
     */
    @TableField("coupon_validity")
    private Integer couponValidity;
    /**
     * 赠送数量
     */
    @TableField("coupon_send_quantity")
    private Integer couponSendQuantity;
    /**
     * 是否冻结 1正常 2冻结
     */
    @TableField("coupon_state")
    private Integer couponState;
    /**
     * 优惠券数量
     */
    @TableField("coupon_count")
    private Integer couponCount;
    /**
     * 剩余数量
     */
    @TableField("remaining_quantity")
    private Integer remainingQuantity;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Dept.java
New file
@@ -0,0 +1,140 @@
package com.agentdriving.driver.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 java.io.Serializable;
/**
 * <p>
 * 部门表
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_dept")
public class Dept extends Model<Dept> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 排序
     */
    private Integer num;
    /**
     * 父部门id
     */
    private Integer pid;
    /**
     * 父级ids
     */
    private String pids;
    /**
     * 简称
     */
    private String simplename;
    /**
     * 全称
     */
    private String fullname;
    /**
     * 提示
     */
    private String tips;
    /**
     * 版本(乐观锁保留字段)
     */
    private Integer version;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getNum() {
        return num;
    }
    public void setNum(Integer num) {
        this.num = num;
    }
    public Integer getPid() {
        return pid;
    }
    public void setPid(Integer pid) {
        this.pid = pid;
    }
    public String getPids() {
        return pids;
    }
    public void setPids(String pids) {
        this.pids = pids;
    }
    public String getSimplename() {
        return simplename;
    }
    public void setSimplename(String simplename) {
        this.simplename = simplename;
    }
    public String getFullname() {
        return fullname;
    }
    public void setFullname(String fullname) {
        this.fullname = fullname;
    }
    public String getTips() {
        return tips;
    }
    public void setTips(String tips) {
        this.tips = tips;
    }
    public Integer getVersion() {
        return version;
    }
    public void setVersion(Integer version) {
        this.version = version;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Dept{" +
            "id=" + id +
            ", num=" + num +
            ", pid=" + pid +
            ", pids=" + pids +
            ", simplename=" + simplename +
            ", fullname=" + fullname +
            ", tips=" + tips +
            ", version=" + version +
            "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Dict.java
New file
@@ -0,0 +1,116 @@
package com.agentdriving.driver.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 java.io.Serializable;
/**
 * <p>
 * 字典表
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_dict")
public class Dict extends Model<Dict> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 排序
     */
    private Integer num;
    /**
     * 父级字典
     */
    private Integer pid;
    /**
     * 名称
     */
    private String name;
    /**
     * 编码
     */
    private String code;
    /**
     * 提示
     */
    private String tips;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getNum() {
        return num;
    }
    public void setNum(Integer num) {
        this.num = num;
    }
    public Integer getPid() {
        return pid;
    }
    public void setPid(Integer pid) {
        this.pid = pid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTips() {
        return tips;
    }
    public void setTips(String tips) {
        this.tips = tips;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Override
    public String toString() {
        return "Dict{" +
                "id=" + id +
                ", num=" + num +
                ", pid=" + pid +
                ", name='" + name + '\'' +
                ", code='" + code + '\'' +
                ", tips='" + tips + '\'' +
                '}';
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Driver.java
New file
@@ -0,0 +1,260 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 司机基础信息
* @author pzb
* @Date 2023/2/8 18:33
*/
@Data
@TableName("t_driver")
public class Driver {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 编号
     */
    @TableField("code")
    private String code;
    /**
     * 名称
     */
    @TableField("name")
    private String name;
    /**
     * 头像
     */
    @TableField("avatar")
    private String avatar;
    /**
     * 手机号
     */
    @TableField("phone")
    private String phone;
    /**
     * 密码
     */
    @TableField("password")
    private String password;
    /**
     * 性别(1=男,2=女)
     */
    @TableField("sex")
    private Integer sex;
    /**
     * 来源
     */
    @TableField("source")
    private Integer source;
    /**
     * 紧急联系人
     */
    @TableField("emergencyContact")
    private String emergencyContact;
    /**
     * 紧急联系电话
     */
    @TableField("emergencyPhone")
    private String emergencyPhone;
    /**
     * 驾驶证号码
     */
    @TableField("driverLicenseNumber")
    private String driverLicenseNumber;
    /**
     * 驾驶证照片
     */
    @TableField("driverLicense")
    private String driverLicense;
    /**
     * 驾驶证初次领证时间
     */
    @TableField("firstCertificateTime")
    private Date firstCertificateTime;
    /**
     * 身份证号码
     */
    @TableField("idcard")
    private String idcard;
    /**
     * 身份证正面照
     */
    @TableField("idcardFront")
    private String idcardFront;
    /**
     * 身份证背面照
     */
    @TableField("idcardBack")
    private String idcardBack;
    /**
     * 邀约人类型(1=用户,2=司机)
     */
    @TableField("inviterType")
    private Integer inviterType;
    /**
     * 邀约人id
     */
    @TableField("inviterId")
    private Integer inviterId;
    /**
     * 代理商id
     */
    @TableField("agentId")
    private Integer agentId;
    /**
     * 分公司id
     */
    @TableField("branchOfficeId")
    private Integer branchOfficeId;
    /**
     * 账户余额
     */
    @TableField("balance")
    private Double balance;
    /**
     * 后台充值余额
     */
    @TableField("backgroundBalance")
    private Double backgroundBalance;
    /**
     * 优惠券余额(订单优惠券支付的金额)
     */
    @TableField("couponBalance")
    private Double couponBalance;
    /**
     * 审核状态(1=待审核,2=已同意,3=已拒绝)
     */
    @TableField("approvalStatus")
    private Integer approvalStatus;
    /**
     * 审核注释
     */
    @TableField("approvalNotes")
    private String approvalNotes;
    /**
     * 审核用户id
     */
    @TableField("approvalUserId")
    private Integer approvalUserId;
    /**
     * 审核时间
     */
    @TableField("approvalTime")
    private Date approvalTime;
    /**
     * 服务状态(1=空闲中,2=服务中)
     */
    @TableField("serverStatus")
    private Integer serverStatus;
    /**
     * 剩余积分
     */
    @TableField("integral")
    private Integer integral;
    /**
     * 评分
     */
    @TableField("score")
    private Double score;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 启用冻结理由
     */
    @TableField("remark")
    private String remark;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 加盟区域省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 加盟区域省名称
     */
    @TableField("provinceName")
    private String provinceName;
    /**
     * 加盟区域市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 加盟区域市名称
     */
    @TableField("cityName")
    private String cityName;
    /**
     * 加盟区域区编号
     */
    @TableField("areaCode")
    private String areaCode;
    /**
     * 加盟区域区名称
     */
    @TableField("areaName")
    private String areaName;
    /**
     * 佣金
     */
    @TableField("commission")
    private Double commission;
    /**
     * 微信收款码
     */
    @TableField("wxCollectionCode")
    private String wxCollectionCode;
    /**
     * 支付宝收款码
     */
    @TableField("zfbCollectionCode")
    private String zfbCollectionCode;
    /**
     * 微信openid
     */
    @TableField("openid")
    private String openid;
    /**
     * 是否打开下单二维码
     */
    @TableField("openOrderQRCode")
    private Integer openOrderQRCode;
    /**
     * 商户号
     */
    @TableField("merchantNumber")
    private String merchantNumber;
    /**
     * 商户姓名
     */
    @TableField("merchantName")
    private String merchantName;
    /**
     * 商户电话
     */
    @TableField("merchantPhone")
    private String merchantPhone;
    /**
     * 商户身份证号码
     */
    @TableField("merchantIDCode")
    private String merchantIDCode;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/DriverBank.java
New file
@@ -0,0 +1,46 @@
package com.agentdriving.driver.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 lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/4/23 17:38
 */
@Data
@TableName("t_driver_bank")
public class DriverBank {
    /**
     * 主键id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 司机id
     */
    @TableField("driverId")
    private Integer driverId;
    /**
     * 姓名
     */
    @TableField("name")
    private String name;
    /**
     * 手机号
     */
    @TableField("phone")
    private String phone;
    /**
     * 身份证号码
     */
    @TableField("IDCode")
    private String IDCode;
    /**
     * 银行卡号
     */
    @TableField("bankNumber")
    private String bankNumber;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/DriverWork.java
New file
@@ -0,0 +1,47 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * 司机上下班记录
 */
@Data
@TableName("t_driver_work")
public class DriverWork {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 司机id
     */
    @TableField("driverId")
    private Integer driverId;
    /**
     * 上班时间
     */
    @TableField("workTime")
    private Date workTime;
    /**
     * 下班时间
     */
    @TableField("offWorkTime")
    private Date offWorkTime;
    /**
     * 在线时长(秒)
     */
    @TableField("onlineTime")
    private Long onlineTime;
    /**
     * 状态(1=上班,2=下班)
     */
    @TableField("status")
    private Integer status;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Edition.java
New file
@@ -0,0 +1,54 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @Date 2023/3/22 23:27
 */
@Data
@TableName("t_edition")
public class Edition {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 版本编号
     */
    @TableField("editionNo")
    private String editionNo;
    /**
     * 版本文件
     */
    @TableField("editionFile")
    private String editionFile;
    /**
     * 版本公告
     */
    @TableField("editionAnnouncement")
    private String editionAnnouncement;
    /**
     * 端口 1用户端 2司机端
     */
    @TableField("editionPort")
    private Integer editionPort;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Expense.java
New file
@@ -0,0 +1,123 @@
package com.agentdriving.driver.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 java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 报销表
 * </p>
 *
 * @author stylefeng
 * @since 2017-12-05
 */
@TableName("sys_expense")
public class Expense extends Model<Expense> {
    private static final long serialVersionUID = 1L;
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 报销金额
     */
    private BigDecimal money;
    /**
     * 描述
     */
    private String desc;
    private Date createtime;
    /**
     * 状态: 1.待提交  2:待审核   3.审核通过
     */
    private Integer state;
    /**
     * 用户id
     */
    private Integer userid;
    /**
     * 流程定义id
     */
    private String processId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public BigDecimal getMoney() {
        return money;
    }
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Integer getUserid() {
        return userid;
    }
    public void setUserid(Integer userid) {
        this.userid = userid;
    }
    public String getProcessId() {
        return processId;
    }
    public void setProcessId(String processId) {
        this.processId = processId;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Expense{" +
            "id=" + id +
            ", money=" + money +
            ", desc=" + desc +
            ", createtime=" + createtime +
            ", state=" + state +
            ", userid=" + userid +
            ", processId=" + processId +
            "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Html.java
New file
@@ -0,0 +1,38 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * 协议
 */
@Data
@TableName("t_html")
public class Html {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 类型(1=用户协议,2=隐私政策,3=法律条款,4=代驾服务协议,5=个人信息处理规则,6=积分说明,7=佣金规则说明,8=行程录音说明,9=预估价格说明,10=加盟基本要求,11=加盟流程,12=起步价说明,13=注销协议,14=关于我们)
     */
    @TableField("type")
    private Integer type;
    /**
     * H5内容
     */
    @TableField("html")
    private String html;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Img.java
New file
@@ -0,0 +1,40 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 系统图片
* @author pzb
* @Date 2023/2/3 10:36
*/
@Data
@TableName("t_img")
public class Img {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 数据类型(1=启动页)
     */
    @TableField("type")
    private Integer type;
    /**
     * 图片地址
     */
    @TableField("img")
    private String img;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/JoiningRequirements.java
New file
@@ -0,0 +1,44 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/9 9:20
 */
@Data
@TableName("t_joining_requirements")
public class JoiningRequirements {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 内容
     */
    @TableField("content")
    private String content;
    /**
     * 排序
     */
    @TableField("sort")
    private Integer sort;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/LoginLog.java
New file
@@ -0,0 +1,128 @@
package com.agentdriving.driver.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 java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 登录记录
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_login_log")
public class LoginLog extends Model<LoginLog> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 日志名称
     */
    private String logname;
    /**
     * 管理员id
     */
    private Integer userid;
    /**
     * 创建时间
     */
    private Date createtime;
    /**
     * 是否执行成功
     */
    private String succeed;
    /**
     * 具体消息
     */
    private String message;
    /**
     * 登录ip
     */
    private String ip;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLogname() {
        return logname;
    }
    public void setLogname(String logname) {
        this.logname = logname;
    }
    public Integer getUserid() {
        return userid;
    }
    public void setUserid(Integer userid) {
        this.userid = userid;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public String getSucceed() {
        return succeed;
    }
    public void setSucceed(String succeed) {
        this.succeed = succeed;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getIp() {
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "LoginLog{" +
            "id=" + id +
            ", logname=" + logname +
            ", userid=" + userid +
            ", createtime=" + createtime +
            ", succeed=" + succeed +
            ", message=" + message +
            ", ip=" + ip +
            "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/MainContent.java
New file
@@ -0,0 +1,45 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 事由管理
* @author pzb
* @Date 2023/2/27 11:34
*/
@Data
@TableName("t_main_content")
public class MainContent {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 数据类型(1=转单,2=司机消单,3=用户取消订单)
     */
    @TableField("type")
    private Integer type;
    /**
     * 内容
     */
    @TableField("content")
    private String content;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Menu.java
New file
@@ -0,0 +1,208 @@
package com.agentdriving.driver.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 org.hibernate.validator.constraints.NotBlank;
import java.io.Serializable;
/**
 * <p>
 * 菜单表
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_menu")
public class Menu extends Model<Menu> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 菜单编号
     */
    private String code;
    /**
     * 菜单父编号
     */
    private String pcode;
    /**
     * 当前菜单的所有父菜单编号
     */
    private String pcodes;
    /**
     * 菜单名称
     */
    @NotBlank
    private String name;
    /**
     * 菜单图标
     */
    private String icon;
    /**
     * url地址
     */
    @NotBlank
    private String url;
    /**
     * 菜单排序号
     */
    private Integer num;
    /**
     * 菜单层级
     */
    private Integer levels;
    /**
     * 是否是菜单(1:是  0:不是)
     */
    private Integer ismenu;
    /**
     * 备注
     */
    private String tips;
    /**
     * 菜单状态 :  1:启用   0:不启用
     */
    private Integer status;
    /**
     * 是否打开:    1:打开   0:不打开
     */
    private Integer isopen;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getPcode() {
        return pcode;
    }
    public void setPcode(String pcode) {
        this.pcode = pcode;
    }
    public String getPcodes() {
        return pcodes;
    }
    public void setPcodes(String pcodes) {
        this.pcodes = pcodes;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public Integer getNum() {
        return num;
    }
    public void setNum(Integer num) {
        this.num = num;
    }
    public Integer getLevels() {
        return levels;
    }
    public void setLevels(Integer levels) {
        this.levels = levels;
    }
    public Integer getIsmenu() {
        return ismenu;
    }
    public void setIsmenu(Integer ismenu) {
        this.ismenu = ismenu;
    }
    public String getTips() {
        return tips;
    }
    public void setTips(String tips) {
        this.tips = tips;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Integer getIsopen() {
        return isopen;
    }
    public void setIsopen(Integer isopen) {
        this.isopen = isopen;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Menu{" +
                "id=" + id +
                ", code=" + code +
                ", pcode=" + pcode +
                ", pcodes=" + pcodes +
                ", name=" + name +
                ", icon=" + icon +
                ", url=" + url +
                ", num=" + num +
                ", levels=" + levels +
                ", ismenu=" + ismenu +
                ", tips=" + tips +
                ", status=" + status +
                ", isopen=" + isopen +
                "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Notice.java
New file
@@ -0,0 +1,115 @@
package com.agentdriving.driver.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 java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 通知表
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_notice")
public class Notice extends Model<Notice> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 标题
     */
    private String title;
    /**
     * 类型
     */
    private Integer type;
    /**
     * 内容
     */
    private String content;
    /**
     * 创建时间
     */
    private Date createtime;
    /**
     * 创建人
     */
    private Integer creater;
    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 Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public Integer getCreater() {
        return creater;
    }
    public void setCreater(Integer creater) {
        this.creater = creater;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Notice{" +
            "id=" + id +
            ", title=" + title +
            ", type=" + type +
            ", content=" + content +
            ", createtime=" + createtime +
            ", creater=" + creater +
            "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/OperationLog.java
New file
@@ -0,0 +1,154 @@
package com.agentdriving.driver.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 java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 操作日志
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_operation_log")
public class OperationLog extends Model<OperationLog> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 日志类型
     */
    private String logtype;
    /**
     * 日志名称
     */
    private String logname;
    /**
     * 用户id
     */
    private Integer userid;
    /**
     * 类名称
     */
    private String classname;
    /**
     * 方法名称
     */
    private String method;
    /**
     * 创建时间
     */
    private Date createtime;
    /**
     * 是否成功
     */
    private String succeed;
    /**
     * 备注
     */
    private String message;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLogtype() {
        return logtype;
    }
    public void setLogtype(String logtype) {
        this.logtype = logtype;
    }
    public String getLogname() {
        return logname;
    }
    public void setLogname(String logname) {
        this.logname = logname;
    }
    public Integer getUserid() {
        return userid;
    }
    public void setUserid(Integer userid) {
        this.userid = userid;
    }
    public String getClassname() {
        return classname;
    }
    public void setClassname(String classname) {
        this.classname = classname;
    }
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public String getSucceed() {
        return succeed;
    }
    public void setSucceed(String succeed) {
        this.succeed = succeed;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "OperationLog{" +
            "id=" + id +
            ", logtype=" + logtype +
            ", logname=" + logname +
            ", userid=" + userid +
            ", classname=" + classname +
            ", method=" + method +
            ", createtime=" + createtime +
            ", succeed=" + succeed +
            ", message=" + message +
            "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Order.java
New file
@@ -0,0 +1,305 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 订单
* @author pzb
* @Date 2023/2/15 16:59
*/
@Data
@TableName("t_order")
public class Order {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Long id;
    /**
     * 订单编号
     */
    @TableField("code")
    private String code;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 乘车人电话
     */
    @TableField("userPhone")
    private String userPhone;
    /**
     * 乘车人姓名
     */
    @TableField("userName")
    private String userName;
    /**
     * 司机id
     */
    @TableField("driverId")
    private Integer driverId;
    /**
     * 订单来源(1=小程序,2=APP)
     */
    @TableField("source")
    private Integer source;
    /**
     * 代理商id
     */
    @TableField("agentId")
    private Integer agentId;
    /**
     * 分公司id
     */
    @TableField("branchOfficeId")
    private Integer branchOfficeId;
    /**
     * 接单时间
     */
    @TableField("orderTakingTime")
    private Date orderTakingTime;
    /**
     * 前往预约点时间
     */
    @TableField("goToAppointmentPointTime")
    private Date goToAppointmentPointTime;
    /**
     * 到达预约点时间
     */
    @TableField("arrivalTimeAtTheAppointmentPoint")
    private Date arrivalTimeAtTheAppointmentPoint;
    /**
     * 开始服务时间
     */
    @TableField("startTime")
    private Date startTime;
    /**
     * 起点地址
     */
    @TableField("startAddress")
    private String startAddress;
    /**
     * 起点纬度
     */
    @TableField("startLat")
    private String startLat;
    /**
     * 起点经度
     */
    @TableField("startLng")
    private String startLng;
    /**
     * 终点地址
     */
    @TableField("endAddress")
    private String endAddress;
    /**
     * 终点纬度
     */
    @TableField("endLat")
    private String endLat;
    /**
     * 终点经度
     */
    @TableField("endLng")
    private String endLng;
    /**
     * 上车时间
     */
    @TableField("boardingTime")
    private Date boardingTime;
    /**
     * 下车时间
     */
    @TableField("getoffTime")
    private Date getoffTime;
    /**
     * 起步里程
     */
    @TableField("startDistance")
    private Double startDistance;
    /**
     * 起步价
     */
    @TableField("startPrice")
    private Double startPrice;
    /**
     * 超出起步里程
     */
    @TableField("overDriveDistance")
    private Double overDriveDistance;
    /**
     * 超出起步里程费
     */
    @TableField("overDrivePrice")
    private Double overDrivePrice;
    /**
     * 长途里程
     */
    @TableField("longDistance")
    private String longDistance;
    /**
     * 长途里程费
     */
    @TableField("longDistancePrice")
    private Double longDistancePrice;
    /**
     * 超出长途里程
     */
    @TableField("overLongDistance")
    private Double overLongDistance;
    /**
     * 超出长途里程费
     */
    @TableField("overLongDistancePrice")
    private Double overLongDistancePrice;
    /**
     * 等待时长(分钟)
     */
    @TableField("waitTime")
    private Integer waitTime;
    /**
     * 等待费
     */
    @TableField("waitTimePrice")
    private Double waitTimePrice;
    /**
     * 超出等待时长(分钟)
     */
    @TableField("outWaitTime")
    private Integer outWaitTime;
    /**
     * 超出等待时长费
     */
    @TableField("outWaitTimePrice")
    private Double outWaitTimePrice;
    /**
     * 恶劣天气里程
     */
    @TableField("badWeatherDistance")
    private Double badWeatherDistance;
    /**
     * 恶劣天气里程费
     */
    @TableField("badWeatherPrice")
    private Double badWeatherPrice;
    /**
     * 恶劣天气超出里程
     */
    @TableField("overBadWeatherDistance")
    private Double overBadWeatherDistance;
    /**
     * 恶劣天气超出里程费
     */
    @TableField("overBadWeatherPrice")
    private Double overBadWeatherPrice;
    /**
     * 天气
     */
    @TableField("weather")
    private String weather;
    /**
     * 预估价
     */
    @TableField("estimatedPrice")
    private Double estimatedPrice;
    /**
     * 预估里程
     */
    @TableField("estimatedMileage")
    private Double estimatedMileage;
    /**
     * 预估时间
     */
    @TableField("estimatedTime")
    private Integer estimatedTime;
    /**
     * 订单金额
     */
    @TableField("orderMoney")
    private Double orderMoney;
    /**
     * 实际里程
     */
    @TableField("actualMileage")
    private Integer actualMileage;
    /**
     * 支付金额
     */
    @TableField("payMoney")
    private Double payMoney;
    /**
     * 优惠金额
     */
    @TableField("discountedPrice")
    private Double discountedPrice;
    /**
     * 优惠券id
     */
    @TableField("couponId")
    private Integer couponId;
    /**
     * 折扣优惠金额
     */
    @TableField("discountAmount")
    private Double discountAmount;
    /**
     * 折扣0.01
     */
    @TableField("discount")
    private Double discount;
    /**
     * 支付类型(1=微信支付,2=余额支付,3=线下支付)
     */
    @TableField("payType")
    private Integer payType;
    /**
     * 支付时间
     */
    @TableField("payTime")
    private Date payTime;
    /**
     * 大厅订单(0=否,1=是)
     */
    @TableField("hallOrder")
    private Integer hallOrder;
    /**
     * 订单开始进入等待状态时间
     */
    @TableField("startWaitTime")
    private Date startWaitTime;
    /**
     * 订单状态(101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待支付,108=待评价,109=已完成,201=转单中,301=已取消,401=等待中)
     */
    @TableField("state")
    private Integer state;
    /**
     * 历史订单状态(用于还原之前状态)
     */
    @TableField("oldState")
    private Integer oldState;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 行程录音地址
     */
    @TableField("routeRecord")
    private String routeRecord;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/OrderRefusal.java
New file
@@ -0,0 +1,55 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 司机拒单记录
* @author pzb
* @Date 2023/2/22 10:21
*/
@Data
@TableName("t_order_refusal")
public class OrderRefusal {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 订单id
     */
    @TableField("order_id")
    private Long orderId;
    /**
     * 司机id
     */
    @TableField("driver_id")
    private Integer driverId;
    /**
     * 起点地址
     */
    @TableField("startAddress")
    private String startAddress;
    /**
     * 终点地址
     */
    @TableField("endAddress")
    private String endAddress;
    /**
     * 编号
     */
    @TableField("code")
    private String code;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/OrderTransfer.java
New file
@@ -0,0 +1,60 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 司机转单记录
* @author pzb
* @Date 2023/2/25 13:40
*/
@Data
@TableName("t_order_transfer")
public class OrderTransfer {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 订单id
     */
    @TableField("orderId")
    private Long orderId;
    /**
     * 原司机id
     */
    @TableField("oldDriverId")
    private Integer oldDriverId;
    /**
     * 新司机id
     */
    @TableField("newDriverId")
    private Integer newDriverId;
    /**
     * 转单原因
     */
    @TableField("cause")
    private String cause;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 转单成功时间
     */
    @TableField("successTime")
    private Date successTime;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/RechargeRecord.java
New file
@@ -0,0 +1,74 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/21 23:08
 */
@Data
@TableName("t_recharge_record")
public class RechargeRecord {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 数据类型(1=用户,2=司机,3=代理商)
     */
    @TableField("type")
    private Integer type;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 流水号
     */
    @TableField("code")
    private String code;
    /**
     * 充值金额
     */
    @TableField("amount")
    private Double amount;
    /**
     * 支付方式(1=微信,2=系统充值)
     */
    @TableField("payType")
    private Integer payType;
    /**
     * 完成支付时间
     */
    @TableField("payTime")
    private Date payTime;
    /**
     * 支付状态(1=待支付,2=已完成)
     */
    @TableField("payStatus")
    private Integer payStatus;
    /**
     * 第三方流水号
     */
    @TableField("orderNumber")
    private String orderNumber;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 代理商id
     */
    @TableField("agentId")
    private Integer agentId;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Region.java
New file
@@ -0,0 +1,104 @@
package com.agentdriving.driver.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;
/**
 * 省市区
 */
@TableName("t_region")
public class Region {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 城市名称
     */
    @TableField("name")
    private String name;
    /**
     * 城市行政code
     */
    @TableField("code")
    private String code;
    /**
     * 区号code
     */
    @TableField("citycode")
    private String citycode;
    /**
     * 父级id
     */
    @TableField("parent_id")
    private Integer parentId;
    /**
     * 英文
     */
    @TableField("english")
    private String english;
    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 getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getCitycode() {
        return citycode;
    }
    public void setCitycode(String citycode) {
        this.citycode = citycode;
    }
    public Integer getParentId() {
        return parentId;
    }
    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }
    public String getEnglish() {
        return english;
    }
    public void setEnglish(String english) {
        this.english = english;
    }
    @Override
    public String toString() {
        return "Region{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", code='" + code + '\'' +
                ", citycode='" + citycode + '\'' +
                ", parentId=" + parentId +
                ", english='" + english + '\'' +
                '}';
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Relation.java
New file
@@ -0,0 +1,75 @@
package com.agentdriving.driver.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 java.io.Serializable;
/**
 * <p>
 * 角色和菜单关联表
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_relation")
public class Relation extends Model<Relation> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 菜单id
     */
    private Long menuid;
    /**
     * 角色id
     */
    private Integer roleid;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Long getMenuid() {
        return menuid;
    }
    public void setMenuid(Long menuid) {
        this.menuid = menuid;
    }
    public Integer getRoleid() {
        return roleid;
    }
    public void setRoleid(Integer roleid) {
        this.roleid = roleid;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Relation{" +
                "id=" + id +
                ", menuid=" + menuid +
                ", roleid=" + roleid +
                "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Revenue.java
New file
@@ -0,0 +1,60 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 收入记录
* @author pzb
* @Date 2023/2/25 16:06
*/
@Data
@TableName("t_revenue")
public class Revenue {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 收入类型(1=订单收入,2=分佣收入)
     */
    @TableField("type")
    private Integer type;
    /**
     * 用户类型(1=用户,2=司机,3=代理商)
     */
    @TableField("userType")
    private Integer userType;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 订单id
     */
    @TableField("orderId")
    private Long orderId;
    /**
     * 收入金额
     */
    @TableField("amount")
    private Double amount;
    /**
     * 余额
     */
    @TableField("balance")
    private Double balance;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/Role.java
New file
@@ -0,0 +1,127 @@
package com.agentdriving.driver.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 java.io.Serializable;
/**
 * <p>
 * 角色表
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_role")
public class Role extends Model<Role> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 序号
     */
    private Integer num;
    /**
     * 父角色id
     */
    private Integer pid;
    /**
     * 角色名称
     */
    private String name;
    /**
     * 部门名称
     */
    private Integer deptid;
    /**
     * 提示
     */
    private String tips;
    /**
     * 保留字段(暂时没用)
     */
    private Integer version;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getNum() {
        return num;
    }
    public void setNum(Integer num) {
        this.num = num;
    }
    public Integer getPid() {
        return pid;
    }
    public void setPid(Integer pid) {
        this.pid = pid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getDeptid() {
        return deptid;
    }
    public void setDeptid(Integer deptid) {
        this.deptid = deptid;
    }
    public String getTips() {
        return tips;
    }
    public void setTips(String tips) {
        this.tips = tips;
    }
    public Integer getVersion() {
        return version;
    }
    public void setVersion(Integer version) {
        this.version = version;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "Role{" +
            "id=" + id +
            ", num=" + num +
            ", pid=" + pid +
            ", name=" + name +
            ", deptid=" + deptid +
            ", tips=" + tips +
            ", version=" + version +
            "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemBulletin.java
New file
@@ -0,0 +1,50 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 系统公告
* @author pzb
* @Date 2023/2/13 11:13
*/
@Data
@TableName("t_system_bulletin")
public class SystemBulletin {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 介绍
     */
    @TableField("introduce")
    private String introduce;
    /**
     * 图片
     */
    @TableField("img")
    private String img;
    /**
     * 富文本内容
     */
    @TableField("content")
    private String content;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemBulletinUser.java
New file
@@ -0,0 +1,55 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 用户系统公告关系数据
* @author pzb
* @Date 2023/2/13 11:49
*/
@Data
@TableName("t_system_bulletin_user")
public class SystemBulletinUser {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Long id;
    /**
     * 系统公告id
     */
    @TableField("systemBulletinId")
    private Integer systemBulletinId;
    /**
     * 用户类型(1=用户,2=司机)
     */
    @TableField("userType")
    private Integer userType;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 阅读(0=否,1=是)
     */
    @TableField("isRead")
    private Integer isRead;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemConfig.java
New file
@@ -0,0 +1,33 @@
package com.agentdriving.driver.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 lombok.Data;
/**
* 系统配置
* @author pzb
* @Date 2023/2/15 16:22
*/
@Data
@TableName("t_system_config")
public class SystemConfig {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 类型(1=派单规则,2=佣金分成规则,3=抽成规则,4=积分规则,5=价格规则,6=余额规则,7=客服管理)
     */
    @TableField("type")
    private Integer type;
    /**
     * 内容
     */
    @TableField("content")
    private String content;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/SystemMessage.java
New file
@@ -0,0 +1,60 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 系统消息
* @author pzb
* @Date 2023/2/10 15:28
*/
@Data
@TableName("t_system_message")
public class SystemMessage {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Long id;
    /**
     * 用户类型(1=用户,2=司机)
     */
    @TableField("userType")
    private Integer userType;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 标题
     */
    @TableField("title")
    private String title;
    /**
     * 内容
     */
    @TableField("content")
    private String content;
    /**
     * 阅读状态(0=否,1=是)
     */
    @TableField("isRead")
    private Integer isRead;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/User.java
New file
@@ -0,0 +1,232 @@
package com.agentdriving.driver.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 java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 管理员表
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
@TableName("sys_user")
public class User extends Model<User> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 头像
     */
    private String avatar;
    /**
     * 账号
     */
    private String account;
    /**
     * 密码
     */
    private String password;
    /**
     * md5密码盐
     */
    private String salt;
    /**
     * 名字
     */
    private String name;
    /**
     * 生日
     */
    private Date birthday;
    /**
     * 性别(1:男 2:女)
     */
    private Integer sex;
    /**
     * 电子邮件
     */
    private String email;
    /**
     * 电话
     */
    private String phone;
    /**
     * 角色id
     */
    private String roleid;
    /**
     * 部门id
     */
    private Integer deptid;
    /**
     * 状态(1:启用  2:冻结  3:删除)
     */
    private Integer status;
    /**
     * 创建时间
     */
    private Date createtime;
    /**
     * 保留字段
     */
    private Integer version;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAvatar() {
        return avatar;
    }
    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getSalt() {
        return salt;
    }
    public void setSalt(String salt) {
        this.salt = salt;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getRoleid() {
        return roleid;
    }
    public void setRoleid(String roleid) {
        this.roleid = roleid;
    }
    public Integer getDeptid() {
        return deptid;
    }
    public void setDeptid(Integer deptid) {
        this.deptid = deptid;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public Integer getVersion() {
        return version;
    }
    public void setVersion(Integer version) {
        this.version = version;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    @Override
    public String toString() {
        return "User{" +
            "id=" + id +
            ", avatar=" + avatar +
            ", account=" + account +
            ", password=" + password +
            ", salt=" + salt +
            ", name=" + name +
            ", birthday=" + birthday +
            ", sex=" + sex +
            ", email=" + email +
            ", phone=" + phone +
            ", roleid=" + roleid +
            ", deptid=" + deptid +
            ", status=" + status +
            ", createtime=" + createtime +
            ", version=" + version +
            "}";
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/UserToCoupon.java
New file
@@ -0,0 +1,65 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 用户优惠券关系
* @author pzb
* @Date 2023/3/2 11:04
*/
@Data
@TableName("t_user_to_coupon")
public class UserToCoupon {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 优惠券id
     */
    @TableField("couponId")
    private Integer couponId;
    /**
     * 领取总数
     */
    @TableField("couponTotal")
    private Integer couponTotal;
    /**
     * 有效数据
     */
    @TableField("validCount")
    private Integer validCount;
    /**
     * 过期数量
     */
    @TableField("expireCount")
    private Integer expireCount;
    /**
     * 过期时间
     */
    @TableField("expireTime")
    private Date expireTime;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 状态 1正常 2冻结 3删除
     */
    @TableField("status")
    private Integer status;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/WeatherCity.java
New file
@@ -0,0 +1,38 @@
package com.agentdriving.driver.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 lombok.Data;
/**
* 天气相关城市
* @author pzb
* @Date 2023/2/25 10:56
*/
@Data
@TableName("t_weather_city")
public class WeatherCity {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.INPUT)
    @TableField("id")
    private Integer id;
    /**
     * 省
     */
    @TableField("province")
    private String province;
    /**
     * 市
     */
    @TableField("city")
    private String city;
    /**
     * 区
     */
    @TableField("district")
    private String district;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/YouTui.java
New file
@@ -0,0 +1,74 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/18 9:55
 */
@Data
@TableName("t_you_tui")
public class YouTui {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 名称
     */
    @TableField("name")
    private String name;
    /**
     * 优推类型(1=次数,2=小时)
     */
    @TableField("type")
    private Integer type;
    /**
     * 图片地址
     */
    @TableField("img")
    private String img;
    /**
     * 优推值
     */
    @TableField("number")
    private Integer number;
    /**
     * 兑换所需积分
     */
    @TableField("integral")
    private Integer integral;
    /**
     * 有效天数
     */
    @TableField("effectiveTime")
    private Integer effectiveTime;
    /**
     * 服务内容
     */
    @TableField("content")
    private String content;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 优推距离
     */
    @TableField("distance")
    private Double distance;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/model/YouTuiDriver.java
New file
@@ -0,0 +1,70 @@
package com.agentdriving.driver.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 lombok.Data;
import java.util.Date;
/**
* 司机优推数据
* @author pzb
* @Date 2023/2/22 14:01
*/
@Data
@TableName("t_you_tui_driver")
public class YouTuiDriver {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 司机id
     */
    @TableField("driverId")
    private Integer driverId;
    /**
     * 优推id
     */
    @TableField("youTuiId")
    private Integer youTuiId;
    /**
     * 积分
     */
    @TableField("integral")
    private Integer integral;
    /**
     * 优推类型(1=次数,2=小时)
     */
    @TableField("type")
    private Integer type;
    /**
     * 优推剩余数量
     */
    @TableField("surplusQuantity")
    private Integer surplusQuantity;
    /**
     * 优推结束时间
     */
    @TableField("endTime")
    private Date endTime;
    /**
     * 状态(1=未使用,2=使用中,3=已结束)
     */
    @TableField("state")
    private Integer state;
    /**
     * 失效时间
     */
    @TableField("failureTime")
    private Date failureTime;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IAccountChangeDetailService.java
New file
@@ -0,0 +1,66 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.AccountChangeDetail;
import com.agentdriving.driver.modular.system.warpper.BalanceDetailWarpper;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.CommissionDetailListWarpper;
import com.agentdriving.driver.modular.system.warpper.IntegralIncomeAndExpensesWarpper;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/3/4 11:34
 */
public interface IAccountChangeDetailService extends IService<AccountChangeDetail> {
    /**
     * 保存数据
     * @param accountChangeDetail
     * @throws Exception
     */
    void saveData(AccountChangeDetail accountChangeDetail) throws Exception;
    /**
     * 获取积分收支明细
     * @param driverId
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<IntegralIncomeAndExpensesWarpper> queryDriverIntegralIncomeAndExpenses(Integer driverId, Integer type, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 获取佣金明细列表
     * @param driverId
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    CommissionDetailListWarpper queryCommissionDetail(Integer driverId, String time, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 获取账户余额明细
     * @param driverId
     * @param time
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<BalanceDetailWarpper> queryBalanceDetail(Integer driverId, String time, Integer type, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 处理司机保险费用
     */
    void deductionInsurance();
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IAgentService.java
New file
@@ -0,0 +1,22 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Agent;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.OpenCityWarpper;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/3/22 22:52
 */
public interface IAgentService extends IService<Agent> {
    /**
     * 获取开通省市数据
     * @return
     * @throws Exception
     */
    List<OpenCityWarpper> queryOpenCity() throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IAppUserService.java
New file
@@ -0,0 +1,12 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.AppUser;
import com.baomidou.mybatisplus.service.IService;
/**
* 用户
* @author pzb
* @Date 2023/2/17 14:02
*/
public interface IAppUserService extends IService<AppUser> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IBranchOfficeService.java
New file
@@ -0,0 +1,24 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.BranchOffice;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.OpenCityWarpper;
import java.util.List;
/**
* 分公司接口逻辑类
* @author pzb
* @Date 2023/2/3 14:49
*/
public interface IBranchOfficeService extends IService<BranchOffice> {
    /**
     * 根据城市code获取开通区域
     * @param cityCode  城市code
     * @return
     * @throws Exception
     */
    List<OpenCityWarpper> queryOpenDistrict(String cityCode) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICancelOrderService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.CancelOrder;
import com.baomidou.mybatisplus.service.IService;
public interface ICancelOrderService extends IService<CancelOrder> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICashWithdrawalService.java
New file
@@ -0,0 +1,23 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.CashWithdrawal;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @date 2023/3/18 17:03
 */
public interface ICashWithdrawalService extends IService<CashWithdrawal> {
    /**
     * 司机提现申请
     * @param type
     * @param money
     * @return
     * @throws Exception
     */
    ResultUtil withdrawCash(Integer driverId, Integer type, Double money) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICommercialService.java
New file
@@ -0,0 +1,23 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Commercial;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.CommercialWarpper;
import java.util.List;
/**
 * 广告接口
 */
public interface ICommercialService extends IService<Commercial> {
    /**
     * 获取广告列表数据
     * @param type      广告类型(1=弹窗广告)
     * @param device    设备(1=小程序,2=司机端)
     * @return
     * @throws Exception
     */
    List<CommercialWarpper> queryCommercialList(Integer uid, Integer type, Integer device) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICommercialUserEjectService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.CommercialUserEject;
import com.baomidou.mybatisplus.service.IService;
public interface ICommercialUserEjectService extends IService<CommercialUserEject> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ICouponService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.model.Coupon;
public interface ICouponService extends IService<Coupon> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDeptService.java
New file
@@ -0,0 +1,33 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.agentdriving.driver.modular.system.model.Dept;
import com.baomidou.mybatisplus.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * 部门服务
 *
 * @author fengshuonan
 * @date 2017-04-27 17:00
 */
public interface IDeptService extends IService<Dept> {
    /**
     * 删除部门
     */
    void deleteDept(Integer deptId);
    /**
     * 获取ztree的节点列表
     */
    List<ZTreeNode> tree();
    /**
     * 获取所有部门列表
     */
    List<Map<String, Object>> list(@Param("condition") String condition);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDictService.java
New file
@@ -0,0 +1,48 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Dict;
import com.baomidou.mybatisplus.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * 字典服务
 *
 * @author fengshuonan
 * @date 2017-04-27 17:00
 */
public interface IDictService extends IService<Dict> {
    /**
     * 添加字典
     */
    void addDict(String dictCode,String dictName,String dictTips, String dictValues);
    /**
     * 编辑字典
     */
    void editDict(Integer dictId,String dictCode, String dictName,String dictTips, String dicts);
    /**
     * 删除字典
     */
    void delteDict(Integer dictId);
    /**
     * 根据编码获取词典列表
     */
    List<Dict> selectByCode(@Param("code") String code);
    /**
     * 根据父类编码获取词典列表
     */
    List<Dict> selectByParentCode(@Param("code") String code);
    /**
     * 查询字典列表
     */
    List<Map<String, Object>> list(@Param("condition") String conditiion);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverBankService.java
New file
@@ -0,0 +1,33 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.DriverBank;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @date 2023/4/23 17:42
 */
public interface IDriverBankService extends IService<DriverBank> {
    /**
     * 添加银行卡
     * @param name
     * @param phone
     * @param IDCode
     * @param bankNumber
     * @return
     * @throws Exception
     */
    ResultUtil addDriverBank(Integer uid, String name, String phone, String IDCode, String bankNumber) throws Exception;
    /**
     * 删除银行卡
     * @param id
     * @return
     * @throws Exception
     */
    ResultUtil delDriverBank(Integer uid, Integer id) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverService.java
New file
@@ -0,0 +1,190 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Driver;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.*;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.*;
import java.util.List;
/**
* 司机
* @author pzb
* @Date 2023/2/8 18:52
*/
public interface IDriverService extends IService<Driver> {
    /**
     * 司机注册
     * @param driverRegisterWarpper
     * @return
     * @throws Exception
     */
    ResultUtil driverRegister(DriverRegisterWarpper driverRegisterWarpper) throws Exception;
    /**
     * 司机登录
     * @param receiver  国家代码+86
     * @param phone     登录手机号
     * @param code      短信验证码
     * @return
     * @throws Exception
     */
    ResultUtil<TokenWarpper> driverLogin(String receiver, String phone, String code) throws Exception;
    /**
     * 司机密码登录
     * @param receiver  国家代码+86
     * @param phone     手机号
     * @param password  密码
     * @return
     * @throws Exception
     */
    ResultUtil<TokenWarpper> driverPassLogin(String receiver, String phone, String password) throws Exception;
    /**
     * 刷新token
     * @param uid
     * @return
     * @throws Exception
     */
    ResultUtil<TokenWarpper> flushedToken(Integer uid) throws Exception;
    /**
     * 校验token获取用户信息
     * @return
     */
    Integer getUserByRequest() throws Exception;
    /**
     * 设置司机密码
     * @param uid
     * @param password
     * @throws Exception
     */
    void setPassword(Integer uid, String password) throws Exception;
    /**
     * 获取5公里范围内的司机坐标
     * @param uid
     * @return
     * @throws Exception
     */
    ResultUtil<List<String>> queryDriverPosition(Integer uid) throws Exception;
    /**
     * 存储司机实时位置
     * @throws Exception
     */
    void addDriverPosition(DriverPositionWarpper driverPositionWarpper) throws Exception;
    /**
     * 获取分享二维码数据
     * @param uid
     * @return
     * @throws Exception
     */
    PromotionWarpper queryPromotionQRCode(Integer uid) throws Exception;
    /**
     * 获取司机个人信息
     * @param uid
     * @return
     * @throws Exception
     */
    DriverInfoWarpper queryDriverInfo(Integer uid) throws Exception;
    /**
     * 修改个人信息
     * @param uid
     * @param driverInfo
     * @return
     * @throws Exception
     */
    ResultUtil saveDriverInfo(Integer uid, DriverInfo driverInfo) throws Exception;
    /**
     * 清空司机积分
     */
    void emptyIntegral();
    /**
     * 司机账户余额充值
     * @param uid
     * @param amount
     * @return
     * @throws Exception
     */
    ResultUtil balanceRecharge(Integer uid, Double amount) throws Exception;
    /**
     * 支付回调通知处理
     * @param out_trade_no
     * @throws Exception
     */
    void balanceRechargeCallback(String out_trade_no, String transaction_id) throws Exception;
    /**
     * 修改密码
     * @param uid
     * @param oldPass
     * @param newPass
     * @return
     * @throws Exception
     */
    ResultUtil updatePassword(Integer uid, String oldPass, String newPass) throws Exception;
    /**
     * 设置密码
     * @param uid
     * @param password
     * @return
     * @throws Exception
     */
    ResultUtil recoverPassword(Integer uid, String password) throws Exception;
    /**
     * 打开下单二维码
     * @param uid
     * @return
     */
    ResultUtil openOrderQRCode(Integer uid) throws Exception;
    /**
     * 关闭下单二维码
     * @param uid
     * @return
     * @throws Exception
     */
    ResultUtil closeOrderQRCode(Integer uid) throws Exception;
    /**
     * 开通小微商户
     * @param name
     * @param number
     * @param phone
     * @return
     * @throws Exception
     */
    ResultUtil microenterprise(Integer uid, String name, String number, String phone) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverWorkService.java
New file
@@ -0,0 +1,27 @@
package com.agentdriving.driver.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.model.DriverWork;
import com.agentdriving.driver.modular.system.util.ResultUtil;
public interface IDriverWorkService extends IService<DriverWork> {
    /**
     * 上班操作
     * @param driverId
     * @return
     * @throws Exception
     */
    ResultUtil driverWork(Integer driverId) throws Exception;
    /**
     * 司机下班操作
     * @param driverId      司机id
     * @param onlineTime    在线时长(秒)
     * @return
     * @throws Exception
     */
    ResultUtil driverOffWork(Integer driverId, Long onlineTime) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IEditionService.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Edition;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @Date 2023/3/22 23:31
 */
public interface IEditionService extends IService<Edition> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IHtmlService.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Html;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author 39373
 * @date 2023/2/26 17:30
 */
public interface IHtmlService extends IService<Html> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IImgService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Img;
import com.baomidou.mybatisplus.service.IService;
public interface IImgService extends IService<Img> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IJoiningRequirementsService.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.JoiningRequirements;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @date 2023/3/9 9:23
 */
public interface IJoiningRequirementsService extends IService<JoiningRequirements> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ILoginLogService.java
New file
@@ -0,0 +1,24 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.LoginLog;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 登录记录 服务类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
public interface ILoginLogService extends IService<LoginLog> {
    /**
     * 获取登录日志列表
     */
    List<Map<String, Object>> getLoginLogs(Page<LoginLog> page, String beginTime, String endTime, String logName, String orderByField, boolean asc);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IMainContentService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.MainContent;
import com.baomidou.mybatisplus.service.IService;
public interface IMainContentService extends IService<MainContent> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IMenuService.java
New file
@@ -0,0 +1,94 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.core.node.MenuNode;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.agentdriving.driver.modular.system.model.Menu;
import com.baomidou.mybatisplus.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * 菜单服务
 *
 * @author fengshuonan
 * @date 2017-05-05 22:19
 */
public interface IMenuService extends IService<Menu> {
    /**
     * 删除菜单
     *
     * @author stylefeng
     * @Date 2017/5/5 22:20
     */
    void delMenu(Long menuId);
    /**
     * 删除菜单包含所有子菜单
     *
     * @author stylefeng
     * @Date 2017/6/13 22:02
     */
    void delMenuContainSubMenus(Long menuId);
    /**
     * 根据条件查询菜单
     *
     * @return
     * @date 2017年2月12日 下午9:14:34
     */
    List<Map<String, Object>> selectMenus(@Param("condition") String condition, @Param("level") String level);
    /**
     * 根据条件查询菜单
     *
     * @return
     * @date 2017年2月12日 下午9:14:34
     */
    List<Long> getMenuIdsByRoleId(@Param("roleId") Integer roleId);
    /**
     * 获取菜单列表树
     *
     * @return
     * @date 2017年2月19日 下午1:33:51
     */
    List<ZTreeNode> menuTreeList();
    /**
     * 获取菜单列表树
     *
     * @return
     * @date 2017年2月19日 下午1:33:51
     */
    List<ZTreeNode> menuTreeListByMenuIds(List<Long> menuIds);
    /**
     * 删除menu关联的relation
     *
     * @param menuId
     * @return
     * @date 2017年2月19日 下午4:10:59
     */
    int deleteRelationByMenu(Long menuId);
    /**
     * 获取资源url通过角色id
     *
     * @param roleId
     * @return
     * @date 2017年2月19日 下午7:12:38
     */
    List<String> getResUrlsByRoleId(Integer roleId);
    /**
     * 根据角色获取菜单
     *
     * @param roleIds
     * @return
     * @date 2017年2月19日 下午10:35:40
     */
    List<MenuNode> getMenusByRoleIds(List<Integer> roleIds);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/INoticeService.java
New file
@@ -0,0 +1,23 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Notice;
import com.baomidou.mybatisplus.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 通知表 服务类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
public interface INoticeService extends IService<Notice> {
    /**
     * 获取通知列表
     */
    List<Map<String, Object>> list(String condition);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOperationLogService.java
New file
@@ -0,0 +1,24 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.OperationLog;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 操作日志 服务类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
public interface IOperationLogService extends IService<OperationLog> {
    /**
     * 获取操作日志列表
     */
    List<Map<String, Object>> getOperationLogs(Page<OperationLog> page, String beginTime, String endTime, String logName, String s, String orderByField, boolean asc);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderPositionService.java
New file
@@ -0,0 +1,27 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.warpper.DriverPositionWarpper;
import com.agentdriving.driver.modular.system.warpper.OrderPositionWarpper;
import java.util.List;
public interface IOrderPositionService {
    /**
     * 存储最新订单坐标
     * @param driverPositionWarpper
     * @throws Exception
     */
    void saveOrderPosition(DriverPositionWarpper driverPositionWarpper) throws Exception;
    /**
     * 获取订单坐标
     * @param orderId
     * @param orderType
     * @return
     * @throws Exception
     */
    List<OrderPositionWarpper> queryPosition(Integer orderId, Integer orderType) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderRefusalService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.OrderRefusal;
import com.baomidou.mybatisplus.service.IService;
public interface IOrderRefusalService extends IService<OrderRefusal> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderService.java
New file
@@ -0,0 +1,204 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Order;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.agentdriving.driver.modular.system.warpper.*;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.*;
import com.agentdriving.driver.modular.system.warpper.OrderInfoWarpper;
import java.util.List;
import java.util.Map;
/**
* 订单
* @author pzb
* @Date 2023/2/16 15:47
*/
public interface IOrderService extends IService<Order> {
    /**
     * 获取司机服务中的订单
     * @param uid
     * @return
     * @throws Exception
     */
    Map<String, Object> queryDriverServerOrder(Integer uid) throws Exception;
    /**
     * 司机代客下单
     * @param uid
     * @param addOrderWarpper
     * @return
     * @throws Exception
     */
    ResultUtil driverAddOrder(Integer uid, AddOrderWarpper addOrderWarpper) throws Exception;
    /**
     * 获取大厅订单列表
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<HallOrderList> queryOrderHall(Integer uid, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 司机拒单
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    ResultUtil rejectionOrder(Integer uid, Long orderId) throws Exception;
    /**
     * 司机接单操作
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    ResultUtil receiveOrder(Integer uid, Long orderId) throws Exception;
    /**
     * 获取订单详情
     * @param orderId
     * @return
     * @throws Exception
     */
    OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception;
    /**
     * 司机走订单流程
     * @param uid
     * @return
     * @throws Exception
     */
    ResultUtil driverProcessOperations(Integer uid, ProcessOperationsWarpper processOperationsWarpper) throws Exception;
    /**
     * 司机转单操作
     * @param uid
     * @param orderId
     * @param cause
     * @return
     * @throws Exception
     */
    ResultUtil transferOrder(Integer uid, Long orderId, String cause) throws Exception;
    /**
     * 修改终点地址
     * @param uid
     * @param orderEndAddressWarpper
     * @return
     * @throws Exception
     */
    ResultUtil setOrderEndAddress(Integer uid, OrderEndAddressWarpper orderEndAddressWarpper) throws Exception;
    /**
     * 取消转单操作
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    ResultUtil cancelTransferOrder(Integer uid, Long orderId) throws Exception;
    /**
     * 司机取消订单
     * @param uid
     * @param orderId
     * @param cause
     * @return
     * @throws Exception
     */
    ResultUtil driverCancelOrder(Integer uid, Long orderId, String cause) throws Exception;
    /**
     * 获取订单费用明细
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    OrderPriceWarpper queryOrderPrice(Integer uid, Long orderId) throws Exception;
    /**
     * 修改订单状态
     * @param uid
     * @param orderId
     * @param state
     * @return
     * @throws Exception
     */
    ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception;
    /**
     * 获取司机的订单列表
     * @param driverId
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<DriverOrderListWarpper> queryDriverOrderList(Integer driverId, Integer state, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 司机邀请列表
     * @param driverId
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<InviteListWarpper> queryInviteList(Integer driverId, String time, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 获取业绩汇总数据
     * @param driverId
     * @return
     * @throws Exception
     */
    PerformanceSummaryWarpper queryPerformanceSummary(Integer driverId, Integer type, String time, Integer dayType) throws Exception;
    /**
     * 获取我的业绩
     * @param driverId
     * @param time
     * @return
     * @throws Exception
     */
    List<MyAchievementWarpper> queryMyAchievement(Integer driverId, String time) throws Exception;
    /**
     * 主动完成线下收款
     */
    void completeCollection();
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IOrderTransferService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.OrderTransfer;
import com.baomidou.mybatisplus.service.IService;
public interface IOrderTransferService extends IService<OrderTransfer> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRechargeRecordService.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.RechargeRecord;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @date 2023/3/21 23:16
 */
public interface IRechargeRecordService extends IService<RechargeRecord> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRelationService.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.Relation;
import com.baomidou.mybatisplus.service.IService;
/**
 * <p>
 * 角色和菜单关联表 服务类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
public interface IRelationService extends IService<Relation> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRevenueService.java
New file
@@ -0,0 +1,41 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.warpper.PerformanceRankingWarpper;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.model.Revenue;
import com.agentdriving.driver.modular.system.warpper.CommissionListWarpper;
import java.util.List;
public interface IRevenueService extends IService<Revenue> {
    /**
     * 获取司机佣金记录
     * @param driverId
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<CommissionListWarpper> queryCommissionList(Integer driverId, String time, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 获取司机总收入
     * @param driverId
     * @return
     * @throws Exception
     */
    Double queryTotalAmount(Integer driverId) throws Exception;
    /**
     * 获取司机佣金收入排行
     * @param time
     * @param dayType
     * @return
     */
    List<PerformanceRankingWarpper> queryDriverRank(Integer type, String time, Integer dayType);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IRoleService.java
New file
@@ -0,0 +1,68 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.agentdriving.driver.modular.system.model.Role;
import com.baomidou.mybatisplus.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * 角色相关业务
 *
 * @author fengshuonan
 * @Date 2017年1月10日 下午9:11:57
 */
public interface IRoleService extends IService<Role> {
    /**
     * 设置某个角色的权限
     *
     * @param roleId 角色id
     * @param ids    权限的id
     * @date 2017年2月13日 下午8:26:53
     */
    void setAuthority(Integer roleId, String ids);
    /**
     * 删除角色
     *
     * @author stylefeng
     * @Date 2017/5/5 22:24
     */
    void delRoleById(Integer roleId);
    /**
     * 根据条件查询角色列表
     *
     * @return
     * @date 2017年2月12日 下午9:14:34
     */
    List<Map<String, Object>> selectRoles(@Param("condition") String condition);
    /**
     * 删除某个角色的所有权限
     *
     * @param roleId 角色id
     * @return
     * @date 2017年2月13日 下午7:57:51
     */
    int deleteRolesById(@Param("roleId") Integer roleId);
    /**
     * 获取角色列表树
     *
     * @return
     * @date 2017年2月18日 上午10:32:04
     */
    List<ZTreeNode> roleTreeList();
    /**
     * 获取角色列表树
     *
     * @return
     * @date 2017年2月18日 上午10:32:04
     */
    List<ZTreeNode> roleTreeListByRoleId(String[] roleId);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemBulletinService.java
New file
@@ -0,0 +1,39 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.SystemBulletin;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.SystemBulletinInfo;
import com.agentdriving.driver.modular.system.warpper.SystemBulletinListWarpper;
import java.util.List;
public interface ISystemBulletinService extends IService<SystemBulletin> {
    /**
     * 获取系统公告列表
     * @param uid       司机id
     * @param pageNum   页码
     * @param size      页条数
     * @return
     * @throws Exception
     */
    List<SystemBulletinListWarpper> querySystemBulletinList(Integer uid, Integer pageNum, Integer size) throws Exception;
    /**
     * 获取公告详情
     * @param id
     * @return
     * @throws Exception
     */
    SystemBulletinInfo querySystemBulletinInfo(Long id) throws Exception;
    /**
     * 清空系统公告
     * @param userId
     * @throws Exception
     */
    void clearSystemBulletinUser(Integer userId) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemBulletinUserService.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.SystemBulletinUser;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @date 2023/3/9 12:04
 */
public interface ISystemBulletinUserService extends IService<SystemBulletinUser> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemConfigService.java
New file
@@ -0,0 +1,12 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.SystemConfig;
import com.baomidou.mybatisplus.service.IService;
/**
* 系统配置
* @author pzb
* @Date 2023/2/15 16:26
*/
public interface ISystemConfigService extends IService<SystemConfig> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/ISystemMessageService.java
New file
@@ -0,0 +1,54 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.SystemMessage;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.SystemMessageWarpper;
import java.util.List;
/**
* 系统消息
* @author pzb
* @Date 2023/2/10 15:34
*/
public interface ISystemMessageService extends IService<SystemMessage> {
    /**
     * 获取个人系统消息列表
     * @param uid
     * @param pageNum
     * @param size
     * @return
     * @throws Exception
     */
    List<SystemMessageWarpper> querySystemMessageList(Integer uid, Integer pageNum, Integer size) throws Exception;
    /**
     * 阅读系统消息
     * @param uid
     * @param ids
     * @throws Exception
     */
    void  readSystems(Integer uid, String ids) throws Exception;
    /**
     * 添加系统消息
     * @param userId        接收用户id
     * @param userType      接收用户类型
     * @param title         标题
     * @param content       消息内容
     * @throws Exception
     */
    void addSystemMessage(Integer userId, Integer userType, String title, String content) throws Exception;
    /**
     * 清空系统消息
     * @param userId
     */
    void clearSystemMessage(Integer userId) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IUserService.java
New file
@@ -0,0 +1,46 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.core.datascope.DataScope;
import com.agentdriving.driver.modular.system.model.User;
import com.baomidou.mybatisplus.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 管理员表 服务类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
public interface IUserService extends IService<User> {
    /**
     * 修改用户状态
     */
    int setStatus(@Param("userId") Integer userId, @Param("status") int status);
    /**
     * 修改密码
     */
    int changePwd(@Param("userId") Integer userId, @Param("pwd") String pwd);
    /**
     * 根据条件查询用户列表
     */
    List<Map<String, Object>> selectUsers(@Param("dataScope") DataScope dataScope, @Param("name") String name, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptid") Integer deptid);
    /**
     * 设置用户的角色
     */
    int setRoles(@Param("userId") Integer userId, @Param("roleIds") String roleIds);
    /**
     * 通过账号获取用户
     */
    User getByAccount(@Param("account") String account);
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IUserToCouponService.java
New file
@@ -0,0 +1,24 @@
package com.agentdriving.driver.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.model.Coupon;
import com.agentdriving.driver.modular.system.model.UserToCoupon;
/**
 * @author zhibing.pu
 * @date 2023/3/2 14:21
 */
public interface IUserToCouponService extends IService<UserToCoupon> {
    /**
     * 获取可用优惠券
     * @param uid
     * @param price
     * @return
     * @throws Exception
     */
    Coupon queryCoupon(Integer uid, Double price) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IWeatherCityService.java
New file
@@ -0,0 +1,7 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.WeatherCity;
import com.baomidou.mybatisplus.service.IService;
public interface IWeatherCityService extends IService<WeatherCity> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IYouTuiDriverService.java
New file
@@ -0,0 +1,56 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.YouTuiDriver;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.baomidou.mybatisplus.service.IService;
import com.agentdriving.driver.modular.system.warpper.DriverYouTuiListWarpper;
import com.agentdriving.driver.modular.system.warpper.DriverYouTuiWarpper;
import java.util.List;
public interface IYouTuiDriverService extends IService<YouTuiDriver> {
    /**
     * 获取司机兑换优推记录
     * @param driverId
     * @return
     * @throws Exception
     */
    List<DriverYouTuiListWarpper> queryDriverYouTuiList(Integer driverId) throws Exception;
    List<DriverYouTuiWarpper> queryDriverYouTuiList1(Integer driverId) throws Exception;
    /**
     * 获取司机优推列表
     * @param driverId
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<DriverYouTuiWarpper> queryDriverYouTui(Integer driverId, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 获取优推数据
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<DriverYouTuiWarpper> queryAllYouTui(Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 司机兑换优推数据
     * @param driverId
     * @param id
     * @return
     * @throws Exception
     */
    ResultUtil redeemBenefits(Integer driverId, Integer id) throws Exception;
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IYouTuiService.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service;
import com.agentdriving.driver.modular.system.model.YouTui;
import com.baomidou.mybatisplus.service.IService;
/**
 * @author zhibing.pu
 * @date 2023/3/18 10:01
 */
public interface IYouTuiService extends IService<YouTui> {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/AccountChangeDetailServiceImpl.java
New file
@@ -0,0 +1,251 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.AccountChangeDetailMapper;
import com.agentdriving.driver.modular.system.model.AccountChangeDetail;
import com.agentdriving.driver.modular.system.util.UUIDUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.model.Driver;
import com.agentdriving.driver.modular.system.model.SystemConfig;
import com.agentdriving.driver.modular.system.service.IAccountChangeDetailService;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.service.ISystemConfigService;
import com.agentdriving.driver.modular.system.warpper.BalanceDetailWarpper;
import com.agentdriving.driver.modular.system.warpper.CommissionDetailListWarpper;
import com.agentdriving.driver.modular.system.warpper.CommissionDetailWarpper;
import com.agentdriving.driver.modular.system.warpper.IntegralIncomeAndExpensesWarpper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
 * 账户变动
 * @author zhibing.pu
 * @date 2023/3/4 11:34
 */
@Service
public class AccountChangeDetailServiceImpl extends ServiceImpl<AccountChangeDetailMapper, AccountChangeDetail> implements IAccountChangeDetailService {
    @Autowired
    private IDriverService driverService;
    @Autowired
    private ISystemConfigService systemConfigService;
    /**
     * 保存数据
     * @param accountChangeDetail
     * @throws Exception
     */
    @Override
    public void saveData(AccountChangeDetail accountChangeDetail) throws Exception {
        accountChangeDetail.setCreateTime(new Date());
        this.baseMapper.insert(accountChangeDetail);
    }
    /**
     * 获取积分收支明细
     * @param driverId
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<IntegralIncomeAndExpensesWarpper> queryDriverIntegralIncomeAndExpenses(Integer driverId, Integer type, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        return this.baseMapper.queryDriverIntegralIncomeAndExpenses(driverId, type, pageNum, pageSize);
    }
    /**
     * 获取佣金明细列表
     * @param driverId
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public CommissionDetailListWarpper queryCommissionDetail(Integer driverId, String time, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        List<CommissionDetailWarpper> commissionDetailWarppers = this.baseMapper.queryCommissionDetail(driverId, time, pageNum, pageSize);
        Double aDouble = this.baseMapper.queryCommissionDetailTotal(driverId, time);
        CommissionDetailListWarpper commissionDetailListWarpper = new CommissionDetailListWarpper();
        commissionDetailListWarpper.setList(commissionDetailWarppers);
        commissionDetailListWarpper.setTotal(aDouble);
        return commissionDetailListWarpper;
    }
    /**
     * 获取账户余额明细
     * @param driverId
     * @param time
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<BalanceDetailWarpper> queryBalanceDetail(Integer driverId, String time, Integer type, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        List<BalanceDetailWarpper> balanceDetailWarppers = this.baseMapper.queryBalanceDetail(driverId, time, type, pageNum, pageSize);
        return balanceDetailWarppers;
    }
    /**
     * 处理司机保险
     */
    @Override
    public void deductionInsurance() {
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
        if(null == systemConfig){
            return;
        }
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        Double num1 = jsonObject.getDouble("num1");
        List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2).eq("status", 1));
        for (Driver driver : drivers) {
            Double couponBalance = driver.getCouponBalance();
            Double backgroundBalance = driver.getBackgroundBalance();
            Double balance = driver.getBalance();
            Double commission = driver.getCommission();
            double all = couponBalance + backgroundBalance + balance + commission;
            if(num1 > all){
                continue;
            }
            double d = num1.doubleValue();
            if(backgroundBalance > 0 && backgroundBalance < d){
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(driver.getId());
                accountChangeDetail.setType(1);
                accountChangeDetail.setChangeType(8);
                accountChangeDetail.setOldData(driver.getBackgroundBalance());
                accountChangeDetail.setNewData(0D);
                accountChangeDetail.setExplain("收取保险费");
                accountChangeDetail.setCreateTime(new Date());
                this.insert(accountChangeDetail);
                d -= backgroundBalance;
                driver.setBackgroundBalance(0D);
            }
            if(backgroundBalance > 0 && backgroundBalance >= d){
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(driver.getId());
                accountChangeDetail.setType(1);
                accountChangeDetail.setChangeType(8);
                accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                driver.setBackgroundBalance(driver.getBackgroundBalance() - d);
                accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                accountChangeDetail.setExplain("收取保险费");
                accountChangeDetail.setCreateTime(new Date());
                this.insert(accountChangeDetail);
                d = 0;
            }
            if(d > 0){
                if(couponBalance > 0 && couponBalance < d){
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(driver.getId());
                    accountChangeDetail.setType(1);
                    accountChangeDetail.setChangeType(8);
                    accountChangeDetail.setOldData(driver.getCouponBalance());
                    accountChangeDetail.setNewData(0D);
                    accountChangeDetail.setExplain("收取保险费");
                    accountChangeDetail.setCreateTime(new Date());
                    this.insert(accountChangeDetail);
                    d -= couponBalance;
                    driver.setCouponBalance(0D);
                }
                if(couponBalance > 0 && couponBalance >= d){
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(driver.getId());
                    accountChangeDetail.setType(1);
                    accountChangeDetail.setChangeType(8);
                    accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    driver.setCouponBalance(driver.getCouponBalance() - d);
                    accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    accountChangeDetail.setExplain("收取保险费");
                    accountChangeDetail.setCreateTime(new Date());
                    this.insert(accountChangeDetail);
                    d = 0;
                }
            }
            if(d > 0){
                if(commission > 0 && commission < d){
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(driver.getId());
                    accountChangeDetail.setType(1);
                    accountChangeDetail.setChangeType(8);
                    accountChangeDetail.setOldData(driver.getCommission());
                    accountChangeDetail.setNewData(0D);
                    accountChangeDetail.setExplain("收取保险费");
                    accountChangeDetail.setCreateTime(new Date());
                    this.insert(accountChangeDetail);
                    d -= commission;
                    driver.setCommission(0D);
                }
                if(commission > 0 && commission >= d){
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(driver.getId());
                    accountChangeDetail.setType(1);
                    accountChangeDetail.setChangeType(8);
                    accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    driver.setCommission(driver.getCommission() - d);
                    accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    accountChangeDetail.setExplain("收取保险费");
                    accountChangeDetail.setCreateTime(new Date());
                    this.insert(accountChangeDetail);
                    d = 0;
                }
            }
            if(d > 0){
                if(balance > 0 && balance < d){
                    continue;
                }
                if(balance > 0 && balance >= d){
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(driver.getId());
                    accountChangeDetail.setType(1);
                    accountChangeDetail.setChangeType(8);
                    accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    driver.setBalance(driver.getBalance() - d);
                    accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    accountChangeDetail.setExplain("收取保险费");
                    accountChangeDetail.setCreateTime(new Date());
                    this.insert(accountChangeDetail);
                    d = 0;
                }
            }
            driverService.updateById(driver);
        }
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/AgentServiceImpl.java
New file
@@ -0,0 +1,70 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.AgentMapper;
import com.agentdriving.driver.modular.system.model.Agent;
import com.agentdriving.driver.modular.system.service.IAgentService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.warpper.OpenCityWarpper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/3/22 22:52
 */
@Service
public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements IAgentService {
    /**
     * 获取开通省市数据
     * @return
     * @throws Exception
     */
    @Override
    public List<OpenCityWarpper> queryOpenCity() throws Exception {
        List<Agent> branchOffices = this.selectList(new EntityWrapper<Agent>().eq("status", 1));
        List<OpenCityWarpper> province = new ArrayList<>();
        //遍历处理省级数据
        List<String> provinceCodes = new ArrayList<>();
        for (Agent branchOffice : branchOffices) {
            String provinceCode = branchOffice.getProvinceCode();
            if(!provinceCodes.contains(provinceCode)){
                provinceCodes.add(provinceCode);
                OpenCityWarpper openCityWarpper = new OpenCityWarpper();
                openCityWarpper.setCode(provinceCode);
                openCityWarpper.setName(branchOffice.getProvinceName());
                province.add(openCityWarpper);
            }
        }
        //遍历处理省级对应的市级数据
        for (OpenCityWarpper openCityWarpper : province) {
            String code = openCityWarpper.getCode();
            List<OpenCityWarpper> city = new ArrayList<>();
            List<String> cityCodes = new ArrayList<>();
            for (Agent branchOffice : branchOffices) {
                String provinceCode1 = branchOffice.getProvinceCode();
                String cityCode = branchOffice.getCityCode();
                if(code.equals(provinceCode1) && !cityCodes.contains(cityCode)){
                    cityCodes.add(cityCode);
                    OpenCityWarpper openCityWarpper1 = new OpenCityWarpper();
                    openCityWarpper1.setCode(cityCode);
                    openCityWarpper1.setName(branchOffice.getCityName());
                    city.add(openCityWarpper1);
                }
            }
            openCityWarpper.setSublevel(city);
        }
        return province;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/AppUserServiceImpl.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.AppUserMapper;
import com.agentdriving.driver.modular.system.model.AppUser;
import com.agentdriving.driver.modular.system.service.IAppUserService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* 用户
* @author pzb
* @Date 2023/2/17 14:03
*/
@Service
public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements IAppUserService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/BranchOfficeServiceImpl.java
New file
@@ -0,0 +1,43 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.BranchOfficeMapper;
import com.agentdriving.driver.modular.system.model.BranchOffice;
import com.agentdriving.driver.modular.system.service.IBranchOfficeService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.warpper.OpenCityWarpper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 分公司逻辑类
* @author pzb
* @Date 2023/2/3 14:48
*/
@Service
public class BranchOfficeServiceImpl extends ServiceImpl<BranchOfficeMapper, BranchOffice> implements IBranchOfficeService {
    /**
     * 根据城市code获取开通区域
     * @param cityCode  城市code
     * @return
     * @throws Exception
     */
    @Override
    public List<OpenCityWarpper> queryOpenDistrict(String cityCode) throws Exception {
        List<BranchOffice> branchOffices = this.selectList(new EntityWrapper<BranchOffice>().eq("cityCode", cityCode).eq("status", 1));
        List<OpenCityWarpper> district = new ArrayList<>();
        for (BranchOffice branchOffice : branchOffices) {
            OpenCityWarpper openCityWarpper = new OpenCityWarpper();
            openCityWarpper.setCode(branchOffice.getDistrictCode());
            openCityWarpper.setName(branchOffice.getDistrictName());
            district.add(openCityWarpper);
        }
        return district;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CancelOrderServiceImpl.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.CancelOrderMapper;
import com.agentdriving.driver.modular.system.model.CancelOrder;
import com.agentdriving.driver.modular.system.service.ICancelOrderService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* 取消订单记录
* @author pzb
* @Date 2023/2/25 14:45
*/
@Service
public class CancelOrderServiceImpl extends ServiceImpl<CancelOrderMapper, CancelOrder> implements ICancelOrderService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
New file
@@ -0,0 +1,105 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.dao.CashWithdrawalMapper;
import com.agentdriving.driver.modular.system.model.AccountChangeDetail;
import com.agentdriving.driver.modular.system.util.PayMoneyUtil;
import com.agentdriving.driver.modular.system.util.UUIDUtil;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.model.CashWithdrawal;
import com.agentdriving.driver.modular.system.model.Driver;
import com.agentdriving.driver.modular.system.service.IAccountChangeDetailService;
import com.agentdriving.driver.modular.system.service.ICashWithdrawalService;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/18 17:03
 */
@Service
public class CashWithdrawalServiceImpl extends ServiceImpl<CashWithdrawalMapper, CashWithdrawal> implements ICashWithdrawalService {
    @Autowired
    private IDriverService driverService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
    /**
     * 司机提现操作
     * @param driverId
     * @param type
     * @param money
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil withdrawCash(Integer driverId, Integer type, Double money) throws Exception {
        Driver driver = driverService.selectById(driverId);
        if(type == 1 && (null == driver.getBalance() || driver.getBalance() < money)){
            return ResultUtil.error("账户余额不足");
        }
        if(type == 2 && (null == driver.getCommission() || driver.getCommission() < money)){
            return ResultUtil.error("佣金余额不足");
        }
        CashWithdrawal cashWithdrawal = new CashWithdrawal();
        cashWithdrawal.setType(2);
        cashWithdrawal.setUserDriverId(driverId);
        cashWithdrawal.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
        cashWithdrawal.setBusinessType(type == 1 ? 12 : 11);
        cashWithdrawal.setAmount(money);
        cashWithdrawal.setState(1);
        cashWithdrawal.setCreateTime(new Date());
        this.insert(cashWithdrawal);
        //增加记录
        AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
        accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
        accountChangeDetail.setUserType(2);
        accountChangeDetail.setUserId(driver.getId());
        accountChangeDetail.setType(1);
        accountChangeDetail.setChangeType(type == 1 ? 4 : 6);
        if(type == 1){
            accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            driver.setBalance(driver.getBalance() - money);
            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            accountChangeDetail.setExplain("账户余额提现");
        }
        if(type == 2){
            accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            driver.setCommission(driver.getCommission() - money);
            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            accountChangeDetail.setExplain("佣金余额提现");
        }
        driverService.updateById(driver);
        accountChangeDetailService.saveData(accountChangeDetail);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String outDetailNo = sdf.format(new Date()) + cashWithdrawal.getId();
        String s = payMoneyUtil.weixinTransferMoney(outDetailNo, money, driver.getOpenid(), driver.getName(), "【芳华代驾】提现付款!");
        if(ToolUtil.isEmpty(s)){
            return ResultUtil.error("提现异常,请联系管理员");
        }
        cashWithdrawal.setState(2);
        cashWithdrawal.setOrderNumber(s);
        this.updateById(cashWithdrawal);
        return ResultUtil.success();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CommercialServiceImpl.java
New file
@@ -0,0 +1,57 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.CommercialMapper;
import com.agentdriving.driver.modular.system.model.Commercial;
import com.agentdriving.driver.modular.system.model.CommercialUserEject;
import com.agentdriving.driver.modular.system.service.ICommercialService;
import com.agentdriving.driver.modular.system.service.ICommercialUserEjectService;
import com.agentdriving.driver.modular.system.util.UUIDUtil;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.warpper.CommercialWarpper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 广告逻辑类
 */
@Service
public class CommercialServiceImpl extends ServiceImpl<CommercialMapper, Commercial> implements ICommercialService {
    @Autowired
    private ICommercialUserEjectService commercialUserEjectService;
    /**
     * 获取广告列表
     * @param type      广告类型(1=弹窗广告)
     * @param device    设备(1=小程序,2=司机端)
     * @return
     * @throws Exception
     */
    @Override
    public List<CommercialWarpper> queryCommercialList(Integer uid, Integer type, Integer device) throws Exception {
        if(type == 1){//弹框广告
            CommercialUserEject commercialUserEject = commercialUserEjectService.selectOne(new EntityWrapper<CommercialUserEject>().eq("userType", 2)
                    .eq("userId", uid).last(" and DATE_FORMAT(now(), '%Y%m%d') = DATE_FORMAT(lastDate, '%Y%m%d')"));
            if(null != commercialUserEject){
                return new ArrayList<>();
            }
        }
        List<CommercialWarpper> commercialWarppers = this.baseMapper.queryCommercialList(type, device);
        if(type == 1 && commercialWarppers.size() > 0){//记录弹窗
            CommercialUserEject commercialUserEject = new CommercialUserEject();
            commercialUserEject.setId(Long.valueOf(UUIDUtil.getNumberRandom(16)));
            commercialUserEject.setLastDate(new Date());
            commercialUserEject.setUserId(uid);
            commercialUserEject.setUserType(2);
            commercialUserEjectService.insert(commercialUserEject);
        }
        return commercialWarppers;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CommercialUserEjectServiceImpl.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.CommercialUserEjectMapper;
import com.agentdriving.driver.modular.system.model.CommercialUserEject;
import com.agentdriving.driver.modular.system.service.ICommercialUserEjectService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class CommercialUserEjectServiceImpl extends ServiceImpl<CommercialUserEjectMapper, CommercialUserEject> implements ICommercialUserEjectService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CouponServiceImpl.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.CouponMapper;
import com.agentdriving.driver.modular.system.service.ICouponService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.model.Coupon;
import org.springframework.stereotype.Service;
@Service
public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements ICouponService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DeptServiceImpl.java
New file
@@ -0,0 +1,47 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.agentdriving.driver.modular.system.dao.DeptMapper;
import com.agentdriving.driver.modular.system.model.Dept;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.service.IDeptService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
@Transactional
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
    @Resource
    private DeptMapper deptMapper;
    @Override
    public void deleteDept(Integer deptId) {
        Dept dept = deptMapper.selectById(deptId);
        Wrapper<Dept> wrapper = new EntityWrapper<>();
        wrapper = wrapper.like("pids", "%[" + dept.getId() + "]%");
        List<Dept> subDepts = deptMapper.selectList(wrapper);
        for (Dept temp : subDepts) {
            temp.deleteById();
        }
        dept.deleteById();
    }
    @Override
    public List<ZTreeNode> tree() {
        return this.baseMapper.tree();
    }
    @Override
    public List<Map<String, Object>> list(String condition) {
        return this.baseMapper.list(condition);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DictServiceImpl.java
New file
@@ -0,0 +1,100 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.common.constant.factory.MutiStrFactory;
import com.agentdriving.driver.core.common.exception.BizExceptionEnum;
import com.agentdriving.driver.core.exception.GunsException;
import com.agentdriving.driver.modular.system.dao.DictMapper;
import com.agentdriving.driver.modular.system.model.Dict;
import com.agentdriving.driver.modular.system.service.IDictService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
@Transactional
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
    @Resource
    private DictMapper dictMapper;
    @Override
    public void addDict(String dictCode,String dictName,String dictTips, String dictValues) {
        //判断有没有该字典
        List<Dict> dicts = dictMapper.selectList(new EntityWrapper<Dict>().eq("code", dictCode).and().eq("pid", 0));
        if (dicts != null && dicts.size() > 0) {
            throw new GunsException(BizExceptionEnum.DICT_EXISTED);
        }
        //解析dictValues
        List<Map<String, String>> items = MutiStrFactory.parseKeyValue(dictValues);
        //添加字典
        Dict dict = new Dict();
        dict.setName(dictName);
        dict.setCode(dictCode);
        dict.setTips(dictTips);
        dict.setNum(0);
        dict.setPid(0);
        this.dictMapper.insert(dict);
        //添加字典条目
        for (Map<String, String> item : items) {
            String code = item.get(MutiStrFactory.MUTI_STR_CODE);
            String name = item.get(MutiStrFactory.MUTI_STR_NAME);
            String num = item.get(MutiStrFactory.MUTI_STR_NUM);
            Dict itemDict = new Dict();
            itemDict.setPid(dict.getId());
            itemDict.setCode(code);
            itemDict.setName(name);
            try {
                itemDict.setNum(Integer.valueOf(num));
            } catch (NumberFormatException e) {
                throw new GunsException(BizExceptionEnum.DICT_MUST_BE_NUMBER);
            }
            this.dictMapper.insert(itemDict);
        }
    }
    @Override
    public void editDict(Integer dictId,String dictCode, String dictName,String dictTips, String dicts) {
        //删除之前的字典
        this.delteDict(dictId);
        //重新添加新的字典
        this.addDict(dictCode,dictName,dictTips, dicts);
    }
    @Override
    public void delteDict(Integer dictId) {
        //删除这个字典的子词典
        Wrapper<Dict> dictEntityWrapper = new EntityWrapper<>();
        dictEntityWrapper = dictEntityWrapper.eq("pid", dictId);
        dictMapper.delete(dictEntityWrapper);
        //删除这个词典
        dictMapper.deleteById(dictId);
    }
    @Override
    public List<Dict> selectByCode(String code) {
        return this.baseMapper.selectByCode(code);
    }
    @Override
    public List<Dict> selectByParentCode(String code) {
        return this.baseMapper.selectByParentCode(code);
    }
    @Override
    public List<Map<String, Object>> list(String conditiion) {
        return this.baseMapper.list(conditiion);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverBankServiceImpl.java
New file
@@ -0,0 +1,108 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.dao.DriverBankMapper;
import com.agentdriving.driver.modular.system.model.Driver;
import com.agentdriving.driver.modular.system.model.DriverBank;
import com.agentdriving.driver.modular.system.service.IDriverBankService;
import com.agentdriving.driver.modular.system.service.IDriverService;
import com.agentdriving.driver.modular.system.util.MallBook.model.BindAccount;
import com.agentdriving.driver.modular.system.util.MallBook.model.InterfaceResponse;
import com.agentdriving.driver.modular.system.util.MallBook.model.UnbindAccount;
import com.agentdriving.driver.modular.system.util.MallBook.util.TrhRequest;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author zhibing.pu
 * @date 2023/4/23 17:42
 */
@Service
public class DriverBankServiceImpl extends ServiceImpl<DriverBankMapper, DriverBank> implements IDriverBankService {
    @Autowired
    private IDriverService driverService;
    /**
     * 添加银行卡
     * @param name
     * @param phone
     * @param IDCode
     * @param bankNumber
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil addDriverBank(Integer uid, String name, String phone, String IDCode, String bankNumber) throws Exception {
        Driver driver = driverService.selectById(uid);
        if(ToolUtil.isEmpty(driver.getMerchantNumber())){
            return ResultUtil.error("请先注册商户");
        }
        int count = this.selectCount(new EntityWrapper<DriverBank>().eq("driverId", uid));
        if(count != 0){
            return ResultUtil.error("您已经有结算账户了");
        }
        DriverBank driverBank = new DriverBank();
        driverBank.setDriverId(uid);
        driverBank.setBankNumber(bankNumber);
        driverBank.setIDCode(IDCode);
        driverBank.setName(name);
        driverBank.setPhone(phone);
        BindAccount bindAccount = new BindAccount();
        bindAccount.setUserId(driver.getMerchantNumber());
        bindAccount.setCertId(IDCode);
        bindAccount.setCardName(name);
        bindAccount.setCardNo(bankNumber);
        bindAccount.setBankAcctType("2");
        bindAccount.setPhone(phone);
        TrhRequest<BindAccount> request = new TrhRequest();
        InterfaceResponse execute = request.execute(bindAccount, BindAccount.SERVICE_CODE);
        if(!"0000".equals(execute.getResult())){
            return ResultUtil.error(execute.getMsg());
        }
        JSONObject jsonObject = JSON.parseObject(execute.getResult());
        String status = jsonObject.getString("status");
        if("2".equals(status)){
            return ResultUtil.error("失败");
        }
        if("0".equals(status)){
            return ResultUtil.error("处理中");
        }
        this.insert(driverBank);
        return ResultUtil.success();
    }
    @Override
    public ResultUtil delDriverBank(Integer uid, Integer id) throws Exception {
        Driver driver = driverService.selectById(uid);
        if(ToolUtil.isEmpty(driver.getMerchantNumber())){
            return ResultUtil.error("请先注册商户");
        }
        UnbindAccount unbindAccount = new UnbindAccount();
        unbindAccount.setUserId(driver.getMerchantNumber());
        TrhRequest<UnbindAccount> request = new TrhRequest<>();
        InterfaceResponse execute = request.execute(unbindAccount, UnbindAccount.SERVICE_CODE);
        if(!"0000".equals(execute.getResult())){
            return ResultUtil.error(execute.getMsg());
        }
        JSONObject jsonObject = JSON.parseObject(execute.getResult());
        String status = jsonObject.getString("status");
        if("2".equals(status)){
            return ResultUtil.error("失败");
        }
        if("0".equals(status)){
            return ResultUtil.error("处理中");
        }
        this.deleteById(id);
        return ResultUtil.success();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java
New file
@@ -0,0 +1,905 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.common.constant.JwtConstants;
import com.agentdriving.driver.core.shiro.ShiroKit;
import com.agentdriving.driver.core.shiro.ShiroUser;
import com.agentdriving.driver.core.util.JwtTokenUtil;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.dao.DriverMapper;
import com.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.*;
import com.agentdriving.driver.modular.system.util.MallBook.model.InterfaceResponse;
import com.agentdriving.driver.modular.system.util.MallBook.model.Register;
import com.agentdriving.driver.modular.system.util.MallBook.util.TrhRequest;
import com.agentdriving.driver.modular.system.util.mongodb.model.Location;
import com.agentdriving.driver.modular.system.util.rongyun.RongYunUtil;
import com.agentdriving.driver.modular.system.warpper.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.*;
import com.agentdriving.driver.modular.system.warpper.*;
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.util.ByteSource;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 司机
* @author pzb
* @Date 2023/2/8 18:52
*/
@Service
public class DriverServiceImpl extends ServiceImpl<DriverMapper, Driver> implements IDriverService {
    private final String salt = "i#sm4";
    @Autowired
    private IBranchOfficeService branchOfficeService;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private IOrderPositionService orderPositionService;
    @Autowired
    private IDriverWorkService driverWorkService;
    @Value("${filePath}")
    private String filePath;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private ISystemConfigService systemConfigService;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
    @Autowired
    private IYouTuiDriverService youTuiDriverService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IRechargeRecordService rechargeRecordService;
    @Autowired
    private IAgentService agentService;
    @Autowired
    private RongYunUtil rongYunUtil;
    @Autowired
    private PushUtil pushUtil;
    /**
     * 司机注册
     * @param driverRegisterWarpper
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverRegister(DriverRegisterWarpper driverRegisterWarpper) throws Exception {
        Driver driver = this.selectOne(new EntityWrapper<Driver>().eq("phone", driverRegisterWarpper.getPhone()).ne("status", 3));
        if(null != driver && driver.getStatus() == 2){
            return ResultUtil.error("该手机账号已被冻结,请联系管理员。");
        }
        if(null != driver && driver.getApprovalStatus() == 1){
            return ResultUtil.error("该手机账号正在审核中。");
        }
        if(null != driver && driver.getApprovalStatus() == 2){
            return ResultUtil.error("该手机账号已审核通过,请直接登录。");
        }
        //账号审核拒绝后的处理
        if(null != driver && driver.getApprovalStatus() == 3){
            try {
                driver = setDriverParamete(driver, driverRegisterWarpper);
            }catch (Exception e){
                return ResultUtil.error(e.getMessage());
            }
            this.updateAllColumnById(driver);
        }
        //新账号
        if(null == driver){
            driver = new Driver();
            driver.setCode(UUIDUtil.getNumberRandom(16));
            try {
                driver = setDriverParamete(driver, driverRegisterWarpper);
            }catch (Exception e){
                return ResultUtil.error(e.getMessage());
            }
            driver.setCreateTime(new Date());
            this.insert(driver);
        }
        return ResultUtil.success();
    }
    /**
     * 组装个人信息
     * @param driver
     * @param driverRegisterWarpper
     * @return
     */
    public Driver setDriverParamete(Driver driver, DriverRegisterWarpper driverRegisterWarpper) throws Exception{
        driver.setAvatar(driverRegisterWarpper.getAvatar());
        driver.setPhone(driverRegisterWarpper.getPhone());
        driver.setEmergencyContact(driverRegisterWarpper.getEmergencyContact());
        driver.setEmergencyPhone(driverRegisterWarpper.getEmergencyPhone());
        driver.setIdcardBack(driverRegisterWarpper.getIdcardBack());
        driver.setIdcardFront(driverRegisterWarpper.getIdcardFront());
        driver.setDriverLicense(driverRegisterWarpper.getDriverLicense());
        //注册地
        String code = driverRegisterWarpper.getCode();
        BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("districtCode", code).eq("status", 1));
        if(null == branchOffice){
            throw new Exception("该区域无服务商");
        }
        driver.setBranchOfficeId(branchOffice.getId());
        driver.setAgentId(branchOffice.getAgentId());
        driver.setProvinceCode(branchOffice.getProvinceCode());
        driver.setProvinceName(branchOffice.getProvinceName());
        driver.setCityName(branchOffice.getCityName());
        driver.setCityCode(branchOffice.getCityCode());
        driver.setAreaCode(branchOffice.getDistrictCode());
        driver.setAreaName(branchOffice.getDistrictName());
        driver.setInviterType(driverRegisterWarpper.getInviterType());
        driver.setInviterId(driverRegisterWarpper.getInviterId());
        driver.setApprovalStatus(1);
        driver.setApprovalNotes("");
        driver.setApprovalTime(null);
        driver.setApprovalUserId(null);
        driver.setStatus(1);
        driver.setSource(driverRegisterWarpper.getSource());
        return driver;
    }
    /**
     * 司机登录逻辑
     * @param receiver  国家代码+86
     * @param phone     登录手机号
     * @param code      短信验证码
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil<TokenWarpper> driverLogin(String receiver, String phone, String code) throws Exception {
        String value = redisUtil.getValue(receiver + phone);
        if(!"12345".equals(code) && ToolUtil.isEmpty(value)){
            return ResultUtil.error("短信验证码无效");
        }
        if(!"12345".equals(code) && !value.equals(code)){
            return ResultUtil.error("短信验证码无效");
        }
        Driver driver = this.selectOne(new EntityWrapper<Driver>().eq("phone", phone).ne("status", 3));
        if(null == driver){
            return ResultUtil.error("请先进行注册");
        }
        if(driver.getStatus() == 2){
            return ResultUtil.error("账号已被冻结,请联系管理员。");
        }
        if(driver.getApprovalStatus() == 1){
            return ResultUtil.error("账号正在审核中。");
        }
        if(driver.getApprovalStatus() == 3){
            return ResultUtil.error("账号审核不通过,请重新申请。");
        }
        String token = getToken(phone, code);
        if(ToolUtil.isEmpty(token)){
            return ResultUtil.error("登录异常,请联系管理员。");
        }
        TokenWarpper tokenWarpper = new TokenWarpper();
        tokenWarpper.setToken(token);
        tokenWarpper.setValidTime(7200L);
        tokenWarpper.setIsSetPassword(ToolUtil.isEmpty(driver.getPassword()) ? 0 : 1);
        String RYToken = rongYunUtil.getToken(driver.getId().toString(), driver.getName(), driver.getAvatar());
        if(ToolUtil.isNotEmpty(RYToken)){
            JSONObject jsonObject = JSON.parseObject(RYToken);
            Integer code1 = jsonObject.getInteger("code");
            if(200 == code1){
                tokenWarpper.setRytoken(jsonObject.getString("token"));
            }
        }
        return ResultUtil.success(tokenWarpper);
    }
    /**
     * 司机密码登录
     * @param receiver  国家代码+86
     * @param phone     手机号
     * @param password  密码
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil<TokenWarpper> driverPassLogin(String receiver, String phone, String password) throws Exception {
        Driver driver = this.selectOne(new EntityWrapper<Driver>().eq("phone", phone).ne("status", 3));
        if(null == driver){
            return ResultUtil.error("请先进行注册");
        }
        if(driver.getStatus() == 2){
            return ResultUtil.error("账号已被冻结,请联系管理员。");
        }
        if(driver.getApprovalStatus() == 1){
            return ResultUtil.error("账号正在审核中。");
        }
        if(driver.getApprovalStatus() == 3){
            return ResultUtil.error("账号审核不通过,请重新申请。");
        }
        if(ToolUtil.isEmpty(password)){
            return ResultUtil.error("密码无效");
        }
        if(ToolUtil.isEmpty(driver.getPassword())){
            return ResultUtil.error("请先配置密码");
        }
        if(!driver.getPassword().equals(ShiroKit.md5(password, salt))){
            return ResultUtil.error("账号密码错误。");
        }
        String token = getToken(phone, password);
        if(ToolUtil.isEmpty(token)){
            return ResultUtil.error("登录异常,请联系管理员。");
        }
        TokenWarpper tokenWarpper = new TokenWarpper();
        tokenWarpper.setToken(token);
        tokenWarpper.setValidTime(Integer.valueOf(7 * 24 * 60 * 60).longValue());
        tokenWarpper.setIsSetPassword(ToolUtil.isEmpty(driver.getPassword()) ? 0 : 1);
        String RYToken = rongYunUtil.getToken(driver.getId().toString(), driver.getName(), driver.getAvatar());
        if(ToolUtil.isNotEmpty(RYToken)){
            JSONObject jsonObject = JSON.parseObject(RYToken);
            Integer code1 = jsonObject.getInteger("code");
            if(200 == code1){
                tokenWarpper.setRytoken(jsonObject.getString("token"));
            }
        }
        return ResultUtil.success(tokenWarpper);
    }
    /**
     * 获取身份凭证
     * @param phone
     * @param password
     * @return
     * @throws Exception
     */
    private String getToken(String phone, String password) throws Exception{
        //封装请求账号密码为shiro可验证的token
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(phone, password.toCharArray());
        //获取数据库中的账号密码,准备比对
        String credentials = ShiroKit.md5(password, salt);
        Driver driver = this.selectOne(new EntityWrapper<Driver>().eq("phone", phone).eq("status", 1));
        ByteSource credentialsSalt = new Md5Hash(salt);
        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
                new ShiroUser(), credentials, credentialsSalt, "");
        //校验用户账号密码
        HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
        md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
        md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
        boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch(
                usernamePasswordToken, simpleAuthenticationInfo);
        if (passwordTrueFlag) {
            String token = JwtTokenUtil.generateToken(phone + System.currentTimeMillis());
            String key = token;
            if(token.length() > 16){
                key = token.substring(token.length() - 16);
            }
            redisUtil.setStrValue(key, driver.getId().toString(), 7 * 24 * 60 * 60);//7天
            redisUtil.setStrValue("DRIVER_" + phone, key, 7 * 24 * 60 * 60);//7天
            //下线
            for (int i = 0; i < 5; i++) {
                Integer code = pushUtil.pushOffline(driver.getId(), 2);
                if(200 == code){
                    break;
                }
            }
            return token;
        }
        return "";
    }
    /**
     * 刷新token
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil<TokenWarpper> flushedToken(Integer uid) throws Exception {
        Driver driver = this.selectById(uid);
        String token = getToken(driver.getPhone(), driver.getPhone());
        if(ToolUtil.isEmpty(token)){
            return ResultUtil.error("刷新token异常,请联系管理员。");
        }
        TokenWarpper tokenWarpper = new TokenWarpper();
        tokenWarpper.setToken(token);
        tokenWarpper.setValidTime(7200L);
        tokenWarpper.setIsSetPassword(ToolUtil.isEmpty(driver.getPassword()) ? 0 : 1);
        return ResultUtil.success(tokenWarpper);
    }
    /**
     * 校验token获取用户信息
     * @return
     * @throws Exception
     */
    @Override
    public Integer getUserByRequest() throws Exception {
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = servletRequestAttributes.getRequest();
        String requestHeader = request.getHeader(JwtConstants.AUTH_HEADER);
        if (ToolUtil.isNotEmpty(requestHeader) && requestHeader.startsWith("Bearer ")) {
            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
            String key = null;
            int length = requestHeader.length();
            if(length > 16){
                key = requestHeader.substring(length - 16);
            }else{
                key = requestHeader;
            }
            String value = redisUtil.getValue(key);
            return null != value ? Integer.valueOf(value) : null;
        }else{
            return null;
        }
    }
    /**
     * 设置司机密码
     * @param uid
     * @param password
     * @throws Exception
     */
    @Override
    public void setPassword(Integer uid, String password) throws Exception {
        Driver driver = this.selectById(uid);
        driver.setPassword(ShiroKit.md5(password, salt));
        this.updateById(driver);
    }
    @Override
    public ResultUtil<List<String>> queryDriverPosition(Integer uid) throws Exception {
        DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
        if(null == driverWork){
            return ResultUtil.error("请先上班");
        }
        String value = redisUtil.getValue("DRIVER" + uid);
        List<String> list = new ArrayList<>();
        if(ToolUtil.isNotEmpty(value)){
            String[] split = value.split(",");
            String lon = split[0];
            String lat = split[1];
            //找到中心点
            GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(lon), Double.valueOf(lat));
            //构造半径
            Distance distanceR = new Distance(5D, Metrics.KILOMETERS);
            //画圆
            Circle circle = new Circle(geoJsonPoint, distanceR);
            // 构造query对象
            Query query = Query.query(Criteria.where("location").withinSphere(circle));
            List<Location> locations = mongoTemplate.find(query, Location.class);
            locations.forEach(s -> {
                String value1 = redisUtil.getValue("DRIVER" + s.getDriverId());
                if(s.getDriverId().compareTo(uid) != 0 && ToolUtil.isNotEmpty(value1)){
                    list.add(s.getLocation().getX() + "," + s.getLocation().getY());
                }
            });
        }
        return ResultUtil.success(list);
    }
    /**
     * 添加司机定位
     * @param driverPositionWarpper
     * @throws Exception
     */
    @Override
    public void addDriverPosition(DriverPositionWarpper driverPositionWarpper) throws Exception {
        //实时位置存入redis中
        Double lon = driverPositionWarpper.getLon();
        Double lat = driverPositionWarpper.getLat();
        Integer driverId = driverPositionWarpper.getDriverId();
        Integer orderId = driverPositionWarpper.getOrderId();
        redisUtil.setStrValue("DRIVER" + driverId, lon + "," + lat, 30);
        Query query = Query.query(Criteria.where("driverId").is(driverId));
        Location old = this.mongoTemplate.findOne(query, Location.class);
        if (Objects.isNull(old)) {
            old = new Location();
            old.setDriverId(driverId);
            old.setLocation(new GeoJsonPoint(lon, lat));
            old.setUpdated(System.currentTimeMillis());
            old.setLastUpdated(System.currentTimeMillis());
            this.mongoTemplate.save(old);
        } else {
            //更新
            Update update = Update
                    .update("location", new GeoJsonPoint(lon, lat))
                    .set("updated", System.currentTimeMillis())
                    .set("lastUpdated", System.currentTimeMillis());
            this.mongoTemplate.updateFirst(query, update, Location.class);
        }
        addDurationCredits(driverId);
        //存储订单轨迹
        if(null != orderId){
            orderPositionService.saveOrderPosition(driverPositionWarpper);
        }
    }
    /**
     * 获取司机推广二维码
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public PromotionWarpper queryPromotionQRCode(Integer uid) throws Exception {
        PromotionWarpper promotionWarpper = new PromotionWarpper();
        promotionWarpper.setUrl("http://121.37.15.157/share/driverShare/index.html?inviterId=" + uid);
        int user = appUserService.selectCount(new EntityWrapper<AppUser>().eq("inviterType", 2).eq("inviterId", uid).eq("status", 1));
        int driver = this.selectCount(new EntityWrapper<Driver>().eq("inviterType", 2).eq("inviterId", uid).eq("approvalStatus", 2).eq("status", 1));
        promotionWarpper.setTotal(user + driver);
        promotionWarpper.setUser(user);
        promotionWarpper.setDriver(driver);
        Driver driver1 = this.selectById(uid);
        promotionWarpper.setAvatar(driver1.getAvatar());
        promotionWarpper.setName(driver1.getName());
        return promotionWarpper;
    }
    /**
     * 添加司机时长积分
     */
    public void addDurationCredits(Integer driverId) throws Exception {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        String value = redisUtil.getValue("ONLINE" + driverId);
        if(ToolUtil.isEmpty(value)){
            redisUtil.setStrValue("ONLINE" + driverId, "0_" + sdf1.format(new Date()) + "_0", 25 * 60 * 60);
            return;
        }
        String today = sdf1.format(new Date());
        String[] s = value.split("_");
        if(!today.equals(s[1])){
            redisUtil.setStrValue("ONLINE" + driverId, "0_" + sdf1.format(new Date()) + "_0", 25 * 60 * 60);
            return;
        }
        Integer second = Integer.valueOf(s[0]) + 5;
        Integer time = Integer.valueOf(s[2]);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
        if(null == systemConfig){
            return;
        }
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        String num1 = jsonObject.getString("num1");//12:00
        String num2 = jsonObject.getString("num2");//12:00
        Integer num3 = jsonObject.getInteger("num3");//每小时增加积分
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long start = sdf.parse(sdf1.format(new Date()) + " " + num1 + ":00").getTime();
        long end = sdf.parse(sdf1.format(new Date()) + " " + num2 + ":00").getTime();
        long l = System.currentTimeMillis();
        if(start <= l && end > l){
            int h = Double.valueOf(second / 3600).intValue();
            if(h > 0 && h > time){
                Driver driver = this.selectById(driverId);
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(driverId);
                accountChangeDetail.setType(2);
                accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
                driver.setIntegral(driver.getIntegral() + num3);
                accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
                accountChangeDetail.setExplain("在线时长奖励");
                accountChangeDetailService.saveData(accountChangeDetail);
                this.updateById(driver);
                time++;
            }
        }
        redisUtil.setStrValue("ONLINE" + driverId, second + "_" + s[1] + "_" + time);
    }
    /**
     * 获取司机个人信息
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public DriverInfoWarpper queryDriverInfo(Integer uid) throws Exception {
        Driver driver = this.selectById(uid);
        DriverInfoWarpper driverInfo = new DriverInfoWarpper();
        BeanUtils.copyProperties(driver, driverInfo);
        driverInfo.setWithdrawBalance(driver.getBalance());
        driverInfo.setBalance(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
        YouTuiDriver youTuiDriver = youTuiDriverService.selectOne(new EntityWrapper<YouTuiDriver>().eq("driverId", uid)
                .eq("state", 2).last(" and failureTime > now() order by failureTime limit 0, 1"));
        if(null != youTuiDriver){
            driverInfo.setYouTuiEnd(youTuiDriver.getType() == 1 ? youTuiDriver.getFailureTime().getTime() : youTuiDriver.getEndTime().getTime());
        }
        List<Integer> state = Arrays.asList(107, 108, 109);
        int count = orderService.selectCount(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1).in("state", state).last(" and DATE_FORMAT(createTime, '%Y-%m-%d') = DATE_FORMAT(now(), '%Y-%m-%d')"));
        driverInfo.setTodayNum(count);
        count = orderService.selectCount(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1).in("state", state).last(" and DATE_FORMAT(createTime, '%Y-%m') = DATE_FORMAT(now(), '%Y-%m')"));
        driverInfo.setMonthNum(count);
        DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
        driverInfo.setWork(null == driverWork ? 0 : 1);
        driverInfo.setOnline(0);
        String value = redisUtil.getValue("ONLINE" + uid);
        if(ToolUtil.isNotEmpty(value)){
            Integer second = Integer.valueOf(value.split("_")[0]);
            driverInfo.setOnline(second);
        }
        driverInfo.setWechatAuthorization(driver.getOpenid() == null ? 0 : 1);
        Agent agent = agentService.selectById(driver.getAgentId());
        driverInfo.setServiceCalls(agent.getServiceCalls());
        return driverInfo;
    }
    /**
     * 修改司机个人信息
     * @param uid
     * @param driverInfo
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil saveDriverInfo(Integer uid, DriverInfo driverInfo) throws Exception {
        Driver driver = this.selectById(uid);
        if(ToolUtil.isNotEmpty(driverInfo.getAvatar())){
            driver.setAvatar(driverInfo.getAvatar());
        }
        if(ToolUtil.isNotEmpty(driverInfo.getEmergencyContact())){
            driver.setEmergencyContact(driverInfo.getEmergencyContact());
        }
        if(ToolUtil.isNotEmpty(driverInfo.getEmergencyPhone())){
            driver.setEmergencyPhone(driverInfo.getEmergencyPhone());
        }
        if(ToolUtil.isNotEmpty(driverInfo.getWxCollectionCode())){
            driver.setWxCollectionCode(driverInfo.getWxCollectionCode());
        }
        if(ToolUtil.isNotEmpty(driverInfo.getZfbCollectionCode())){
            driver.setZfbCollectionCode(driverInfo.getZfbCollectionCode());
        }
        if(ToolUtil.isNotEmpty(driverInfo.getPhone()) && ToolUtil.isNotEmpty(driverInfo.getCode())){
            String value = redisUtil.getValue(driverInfo.getPhone());
            if(!"12345".equals(driverInfo.getCode())){
                if(ToolUtil.isEmpty(value)){
                    return ResultUtil.error("验证码已过期");
                }
                if(!value.equals(driverInfo.getCode())){
                    return ResultUtil.error("验证码无效");
                }
            }
            driver.setPhone(driverInfo.getPhone());
        }
        if(ToolUtil.isNotEmpty(driverInfo.getOpenid())){
            driver.setOpenid(driverInfo.getOpenid());
        }
        this.updateById(driver);
        return ResultUtil.success();
    }
    /**
     * 清空司机积分
     */
    @Override
    public void emptyIntegral() {
        List<Driver> drivers = this.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2).eq("status", 1));
        List<AccountChangeDetail> list = new ArrayList<>();
        for (Driver driver : drivers) {
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
            accountChangeDetail.setUserId(driver.getId());
            accountChangeDetail.setCreateTime(new Date());
            accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
            accountChangeDetail.setType(2);
            accountChangeDetail.setExplain("定时清空积分");
            driver.setIntegral(0);
            accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
            list.add(accountChangeDetail);
        }
        if(drivers.size() > 0){
            this.updateBatchById(drivers);
            accountChangeDetailService.insertBatch(list);
        }
    }
    @Override
    public ResultUtil balanceRecharge(Integer uid, Double amount) throws Exception {
        Driver driver = this.selectById(uid);
        //调起微信
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String out_trade_no = sdf.format(new Date()) + UUIDUtil.getNumberRandom(3);
        RechargeRecord rechargeRecord = new RechargeRecord();
        rechargeRecord.setType(2);
        rechargeRecord.setUserId(uid);
        rechargeRecord.setCode(out_trade_no);
        rechargeRecord.setAmount(amount);
        rechargeRecord.setPayType(1);
        rechargeRecord.setPayStatus(1);
        rechargeRecord.setCreateTime(new Date());
        rechargeRecord.setAgentId(driver.getAgentId());
        rechargeRecordService.insert(rechargeRecord);
        ResultUtil weixinpay = payMoneyUtil.weixinpay("余额充值", "", out_trade_no, amount.toString(), "/base/driver/balanceRechargeCallback", "APP");
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    int num = 1;
                    int wait = 0;
                    while (num <= 10){
                        int min = 5000;
                        wait += (min * num);
                        RechargeRecord rechargeRecord1 = rechargeRecordService.selectOne(new EntityWrapper<RechargeRecord>().eq("code", out_trade_no));
                        if(rechargeRecord1.getPayStatus() != 1){
                            return;
                        }
                        /**
                         * SUCCESS--支付成功
                         * REFUND--转入退款
                         * NOTPAY--未支付
                         * CLOSED--已关闭
                         * REVOKED--已撤销(刷卡支付)
                         * USERPAYING--用户支付中
                         * PAYERROR--支付失败(其他原因,如银行返回失败)
                         * ACCEPT--已接收,等待扣款
                         */
                        ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(out_trade_no, "");
                        if(resultUtil.getCode() == 200){
                            Map<String, String> map = resultUtil.getData();
                            String trade_type = map.get("trade_type");
                            String trade_state = map.get("trade_state");
                            String transaction_id = map.get("transaction_id");
                            if("REFUND".equals(trade_state) || "NOTPAY".equals(trade_state) || "CLOSED".equals(trade_state) || "REVOKED".equals(trade_state) || "PAYERROR".equals(trade_state)){
                                rechargeRecordService.deleteById(rechargeRecord1.getId());
                                return;
                            }
                            if("SUCCESS".equals(trade_state)){
                                Driver driver1 = DriverServiceImpl.this.selectById(uid);
                                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                                accountChangeDetail.setUserType(2);
                                accountChangeDetail.setUserId(uid);
                                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                                accountChangeDetail.setChangeType(3);
                                accountChangeDetail.setType(1);
                                accountChangeDetail.setCreateTime(new Date());
                                accountChangeDetail.setExplain("余额充值");
                                accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                driver1.setBalance(driver1.getBalance() + amount);
                                accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                DriverServiceImpl.this.updateById(driver1);
                                accountChangeDetailService.saveData(accountChangeDetail);
                                rechargeRecord1.setPayTime(new Date());
                                rechargeRecord1.setPayStatus(2);
                                rechargeRecord1.setOrderNumber(transaction_id);
                                rechargeRecordService.updateById(rechargeRecord1);
                                return;
                            }
                            if("USERPAYING".equals(trade_state) || "ACCEPT".equals(trade_state)){
                                Thread.sleep(wait);
                                num++;
                            }
                        }else{
                            Thread.sleep(wait);
                            num++;
                        }
                        if(10 == num){
                            rechargeRecordService.deleteById(rechargeRecord1.getId());
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }).start();
        return weixinpay;
    }
    /**
     * 充值回调通知逻辑处理
     * @param out_trade_no
     * @throws Exception
     */
    @Override
    public void balanceRechargeCallback(String out_trade_no, String transaction_id) throws Exception {
        RechargeRecord rechargeRecord1 = rechargeRecordService.selectOne(new EntityWrapper<RechargeRecord>().eq("code", out_trade_no));
        if(rechargeRecord1.getPayStatus() != 1){
            return;
        }
        Driver driver1 = this.selectById(rechargeRecord1.getUserId());
        AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
        accountChangeDetail.setUserType(2);
        accountChangeDetail.setUserId(rechargeRecord1.getUserId());
        accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
        accountChangeDetail.setChangeType(3);
        accountChangeDetail.setType(1);
        accountChangeDetail.setCreateTime(new Date());
        accountChangeDetail.setExplain("余额充值");
        accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
        driver1.setBalance(driver1.getBalance() + rechargeRecord1.getAmount());
        accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
        this.updateById(driver1);
        accountChangeDetailService.saveData(accountChangeDetail);
        rechargeRecord1.setPayTime(new Date());
        rechargeRecord1.setPayStatus(2);
        rechargeRecord1.setOrderNumber(transaction_id);
        rechargeRecordService.updateById(rechargeRecord1);
    }
    /**
     * 修改密码
     * @param uid
     * @param oldPass
     * @param newPass
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil updatePassword(Integer uid, String oldPass, String newPass) throws Exception {
        Driver driver = this.selectById(uid);
        if(!ShiroKit.md5(oldPass, salt).equals(driver.getPassword())){
            return ResultUtil.error("原密码错误");
        }
        newPass = ShiroKit.md5(newPass, salt);
        driver.setPassword(newPass);
        this.updateById(driver);
        return ResultUtil.success();
    }
    /**
     * 设置密码
     * @param uid
     * @param password
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil recoverPassword(Integer uid, String password) throws Exception {
        Driver driver = this.selectById(uid);
        password = ShiroKit.md5(password, salt);
        driver.setPassword(password);
        this.updateById(driver);
        return ResultUtil.success();
    }
    /**
     * 打开下单二维码
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil openOrderQRCode(Integer uid) throws Exception {
        Driver driver = this.selectById(uid);
        driver.setOpenOrderQRCode(1);
        this.updateById(driver);
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                Driver driver = DriverServiceImpl.this.selectById(uid);
                driver.setOpenOrderQRCode(0);
                DriverServiceImpl.this.updateById(driver);
            }
        }, 120000);
        return ResultUtil.success();
    }
    /**
     * 关闭下单二维码
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil closeOrderQRCode(Integer uid) throws Exception {
        Driver driver = this.selectById(uid);
        driver.setOpenOrderQRCode(0);
        this.updateById(driver);
        return ResultUtil.success();
    }
    /**
     * 开通小微商户
     * @param name
     * @param number
     * @param phone
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil microenterprise(Integer uid, String name, String number, String phone) throws Exception {
        Driver driver = this.selectById(uid);
        Register registerVO = new Register();
        registerVO.setMerUserId("driver_" + uid);
        registerVO.setPhone(phone);
        registerVO.setUserType("0");
        registerVO.setUserName(name);
        registerVO.setCertId(number);
        registerVO.setNotifyUrl("");
        TrhRequest<Register> request = new TrhRequest();
        InterfaceResponse execute = request.execute(registerVO, Register.SERVICE_CODE);
        if(!"0000".equals(execute.getResult())){
            return ResultUtil.error(execute.getMsg());
        }
        JSONObject jsonObject = JSON.parseObject(execute.getResult());
        String status = jsonObject.getString("status");
        if("2".equals(status)){
            return ResultUtil.error("失败");
        }
        if("0".equals(status)){
            return ResultUtil.error("处理中");
        }
        String userId = jsonObject.getString("userId");
        driver.setMerchantNumber(userId);
        driver.setMerchantIDCode(number);
        driver.setMerchantName(name);
        driver.setMerchantPhone(phone);
        this.updateById(driver);
        return ResultUtil.success();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverWorkServiceImpl.java
New file
@@ -0,0 +1,119 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.dao.DriverWorkMapper;
import com.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.RedisUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* 司机上下班操作记录
* @author pzb
* @Date 2023/2/15 15:48
*/
@Service
public class DriverWorkServiceImpl extends ServiceImpl<DriverWorkMapper, DriverWork> implements IDriverWorkService {
    @Autowired
    private IDriverService driverService;
    @Autowired
    private ISystemConfigService systemConfigService;
    @Autowired
    private IOrderService orderService;
    @Autowired
    private IOrderTransferService orderTransferService;
    @Autowired
    private RedisUtil redisUtil;
    /**
     * 司机上班操作
     * @param driverId
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverWork(Integer driverId) throws Exception {
        Driver driver = driverService.selectById(driverId);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 6));
        Double num1 = JSON.parseObject(systemConfig.getContent()).getDouble("num1");
        if(driver.getBalance() == null || driver.getBalance().compareTo(num1) < 0){
            return ResultUtil.error("账户余额不足,请先充值");
        }
        systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        Integer num5 = jsonObject.getInteger("num5");
        OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("oldDriverId", driverId)
                .eq("status", 1).isNotNull("successTime").orderBy("createTime desc limit 0, 1"));
        if(null != orderTransfer){
            int i = Double.valueOf((System.currentTimeMillis() - orderTransfer.getSuccessTime().getTime()) / 60000).intValue();
            if(num5 > i){
                return ResultUtil.error("暂时还无法上班,请" + (num5 - i) + "分钟后重试");
            }
        }
        DriverWork driverWork = this.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverId).eq("status", 1));
        if(null != driverWork){
            return ResultUtil.error("您正在上班中");
        }
        driverWork = new DriverWork();
        driverWork.setDriverId(driverId);
        driverWork.setWorkTime(new Date());
        driverWork.setOnlineTime(0L);
        driverWork.setStatus(1);
        this.insert(driverWork);
        return ResultUtil.success();
    }
    /**
     * 司机下班操作
     * @param driverId      司机id
     * @param onlineTime    在线时长(秒)
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverOffWork(Integer driverId, Long onlineTime) throws Exception {
        List<Integer> state = Arrays.asList(102, 103, 104, 105, 106, 201, 401);
        int count = orderService.selectCount(new EntityWrapper<Order>().eq("driverId", driverId).eq("status", 1).in("state", state));
        if(count > 0){
            return ResultUtil.error("还有未完成的订单");
        }
        DriverWork driverWork = this.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverId).eq("status", 1));
        if(null == driverWork){
            return ResultUtil.error("您还未上班");
        }
        driverWork.setOffWorkTime(new Date());
        driverWork.setOnlineTime(0L);
        String value = redisUtil.getValue("ONLINE" + driverId);
        if(ToolUtil.isNotEmpty(value)){
            Integer online = Integer.valueOf(value.split("_")[0]);
            driverWork.setOnlineTime(online.longValue());
        }
        driverWork.setStatus(2);
        this.updateById(driverWork);
        Driver driver = driverService.selectById(driverId);
        driver.setServerStatus(1);
        driverService.updateById(driver);
        return ResultUtil.success();
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/EditionServiceImpl.java
New file
@@ -0,0 +1,15 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.EditionMapper;
import com.agentdriving.driver.modular.system.model.Edition;
import com.agentdriving.driver.modular.system.service.IEditionService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * @author zhibing.pu
 * @Date 2023/3/22 23:32
 */
@Service
public class EditionServiceImpl extends ServiceImpl<EditionMapper, Edition> implements IEditionService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/HtmlServiceImpl.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.HtmlMapper;
import com.agentdriving.driver.modular.system.model.Html;
import com.agentdriving.driver.modular.system.service.IHtmlService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * TODO 协议
 * @author 39373
 * @date 2023/2/26 17:31
 */
@Service
public class HtmlServiceImpl extends ServiceImpl<HtmlMapper, Html> implements IHtmlService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/ImgServiceImpl.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.ImgMapper;
import com.agentdriving.driver.modular.system.model.Img;
import com.agentdriving.driver.modular.system.service.IImgService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class ImgServiceImpl extends ServiceImpl<ImgMapper, Img> implements IImgService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/JoiningRequirementsServiceImpl.java
New file
@@ -0,0 +1,15 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.JoiningRequirementsMapper;
import com.agentdriving.driver.modular.system.model.JoiningRequirements;
import com.agentdriving.driver.modular.system.service.IJoiningRequirementsService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * @author zhibing.pu
 * @date 2023/3/9 9:23
 */
@Service
public class JoiningRequirementsServiceImpl extends ServiceImpl<JoiningRequirementsMapper, JoiningRequirements> implements IJoiningRequirementsService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/LoginLogServiceImpl.java
New file
@@ -0,0 +1,28 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.LoginLogMapper;
import com.agentdriving.driver.modular.system.model.LoginLog;
import com.agentdriving.driver.modular.system.service.ILoginLogService;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 登录记录 服务实现类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
@Service
public class LoginLogServiceImpl extends ServiceImpl<LoginLogMapper, LoginLog> implements ILoginLogService {
    @Override
    public List<Map<String, Object>> getLoginLogs(Page<LoginLog> page, String beginTime, String endTime, String logName, String orderByField, boolean asc) {
        return this.baseMapper.getLoginLogs(page, beginTime, endTime, logName, orderByField, asc);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/MainContentServiceImpl.java
New file
@@ -0,0 +1,11 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.MainContentMapper;
import com.agentdriving.driver.modular.system.model.MainContent;
import com.agentdriving.driver.modular.system.service.IMainContentService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class MainContentServiceImpl extends ServiceImpl<MainContentMapper, MainContent> implements IMainContentService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/MenuServiceImpl.java
New file
@@ -0,0 +1,90 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.node.MenuNode;
import com.agentdriving.driver.core.node.ZTreeNode;
import com.agentdriving.driver.modular.system.dao.MenuMapper;
import com.agentdriving.driver.modular.system.model.Menu;
import com.agentdriving.driver.modular.system.service.IMenuService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * 菜单服务
 *
 * @author fengshuonan
 * @date 2017-05-05 22:20
 */
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
    @Resource
    private MenuMapper menuMapper;
    @Override
    public void delMenu(Long menuId) {
        //删除菜单
        this.menuMapper.deleteById(menuId);
        //删除关联的relation
        this.menuMapper.deleteRelationByMenu(menuId);
    }
    @Override
    public void delMenuContainSubMenus(Long menuId) {
        Menu menu = menuMapper.selectById(menuId);
        //删除当前菜单
        delMenu(menuId);
        //删除所有子菜单
        Wrapper<Menu> wrapper = new EntityWrapper<>();
        wrapper = wrapper.like("pcodes", "%[" + menu.getCode() + "]%");
        List<Menu> menus = menuMapper.selectList(wrapper);
        for (Menu temp : menus) {
            delMenu(temp.getId());
        }
    }
    @Override
    public List<Map<String, Object>> selectMenus(String condition, String level) {
        return this.baseMapper.selectMenus(condition, level);
    }
    @Override
    public List<Long> getMenuIdsByRoleId(Integer roleId) {
        return this.baseMapper.getMenuIdsByRoleId(roleId);
    }
    @Override
    public List<ZTreeNode> menuTreeList() {
        return this.baseMapper.menuTreeList();
    }
    @Override
    public List<ZTreeNode> menuTreeListByMenuIds(List<Long> menuIds) {
        return this.baseMapper.menuTreeListByMenuIds(menuIds);
    }
    @Override
    public int deleteRelationByMenu(Long menuId) {
        return this.baseMapper.deleteRelationByMenu(menuId);
    }
    @Override
    public List<String> getResUrlsByRoleId(Integer roleId) {
        return this.baseMapper.getResUrlsByRoleId(roleId);
    }
    @Override
    public List<MenuNode> getMenusByRoleIds(List<Integer> roleIds) {
        return this.baseMapper.getMenusByRoleIds(roleIds);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/NoticeServiceImpl.java
New file
@@ -0,0 +1,27 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.NoticeMapper;
import com.agentdriving.driver.modular.system.model.Notice;
import com.agentdriving.driver.modular.system.service.INoticeService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 通知表 服务实现类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
@Service
public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements INoticeService {
    @Override
    public List<Map<String, Object>> list(String condition) {
        return this.baseMapper.list(condition);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OperationLogServiceImpl.java
New file
@@ -0,0 +1,28 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.OperationLogMapper;
import com.agentdriving.driver.modular.system.model.OperationLog;
import com.agentdriving.driver.modular.system.service.IOperationLogService;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 操作日志 服务实现类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
@Service
public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, OperationLog> implements IOperationLogService {
    @Override
    public List<Map<String, Object>> getOperationLogs(Page<OperationLog> page, String beginTime, String endTime, String logName, String s, String orderByField, boolean asc) {
        return this.baseMapper.getOperationLogs(page, beginTime, endTime, logName, s, orderByField, asc);
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java
New file
@@ -0,0 +1,171 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.model.Order;
import com.agentdriving.driver.modular.system.service.IOrderPositionService;
import com.agentdriving.driver.modular.system.service.IOrderService;
import com.agentdriving.driver.modular.system.util.GeodesyUtil;
import com.agentdriving.driver.modular.system.util.RedisUtil;
import com.agentdriving.driver.modular.system.warpper.DriverPositionWarpper;
import com.agentdriving.driver.modular.system.warpper.OrderPositionWarpper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.agentdriving.driver.modular.system.warpper.ProcessOperationsWarpper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.*;
import java.util.*;
/**
 * 订单轨迹逻辑类
 */
@Service
public class OrderPositionServiceImpl implements IOrderPositionService {
    @Value("${filePath}")
    private String filePath;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private IOrderService orderService;
    private Map<String, Integer> map = new HashMap<>();
    /**
     * 保存订单最新坐标
     * @param driverPositionWarpper
     * @throws Exception
     */
    @Override
    public void saveOrderPosition(DriverPositionWarpper driverPositionWarpper) throws Exception {
        Integer orderId = driverPositionWarpper.getOrderId();
        Integer orderType = driverPositionWarpper.getOrderType();
        File file = new File(filePath + orderId + ".json");
        if(!file.exists()){
            file.getParentFile().mkdirs();
            file.createNewFile();
        }
        List<OrderPositionWarpper> orderPositionWarppers = queryPosition(orderId, orderType);
        if(orderPositionWarppers.size() > 0){
            OrderPositionWarpper orderPositionWarpper = orderPositionWarppers.get(orderPositionWarppers.size() - 1);
            saveOrderMileage(driverPositionWarpper, orderPositionWarpper);
        }
        //大于50米才存储有效定位数据
        if(orderPositionWarppers.size() > 0){
            OrderPositionWarpper orderPositionWarpper1 = orderPositionWarppers.get(orderPositionWarppers.size() - 1);
            String fromLonLat = driverPositionWarpper.getLon() + "," + driverPositionWarpper.getLat();
            String toLonLat = orderPositionWarpper1.getLon() + "," + orderPositionWarpper1.getLat();
            Map<String, Double> distance = GeodesyUtil.getDistance(fromLonLat, toLonLat);
            Double wgs84 = distance.get("WGS84");
            if(wgs84 >= 50){
                OrderPositionWarpper orderPositionWarpper = new OrderPositionWarpper();
                BeanUtils.copyProperties(driverPositionWarpper, orderPositionWarpper);
                orderPositionWarpper.setInsertTime(new Date());
                orderPositionWarppers.add(orderPositionWarpper);
            }
        }else{
            OrderPositionWarpper orderPositionWarpper = new OrderPositionWarpper();
            BeanUtils.copyProperties(driverPositionWarpper, orderPositionWarpper);
            orderPositionWarpper.setInsertTime(new Date());
            orderPositionWarppers.add(orderPositionWarpper);
        }
        //写入相应的文件
        PrintWriter out = new PrintWriter(new FileWriter(file));
        out.write(JSON.toJSONString(orderPositionWarppers));
        out.flush();
        out.close();
    }
    /**
     * 保存行驶里程
     * @param driverPositionWarpper
     * @param orderPositionWarpper
     */
    public void saveOrderMileage(DriverPositionWarpper driverPositionWarpper, OrderPositionWarpper orderPositionWarpper){
        String fromLonLat = driverPositionWarpper.getLon() + "," + driverPositionWarpper.getLat();
        String toLonLat = orderPositionWarpper.getLon() + "," + orderPositionWarpper.getLat();
        Map<String, Double> distance = GeodesyUtil.getDistance(fromLonLat, toLonLat);
        Order order = orderService.selectById(driverPositionWarpper.getOrderId());
        Double wgs84 = distance.get("WGS84");
        Integer num = map.get(order.getId().toString());
        if(50 < wgs84){
            order.setActualMileage(order.getActualMileage() + wgs84.intValue());
            orderService.updateById(order);
            map.put(order.getId().toString(), 0);
            if(order.getState() == 401){//定位变动,自动开始服务
                ProcessOperationsWarpper processOperationsWarpper = new ProcessOperationsWarpper();
                processOperationsWarpper.setOrderId(order.getId());
                processOperationsWarpper.setState(105);
                try {
                    orderService.driverProcessOperations(order.getDriverId(), processOperationsWarpper);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        if(50 >= wgs84 && 12 <= (null == num ? 0 : num)){//1分钟(5秒上传一次数据)
            Integer integer = map.get(order.getId().toString());
            map.put(order.getId().toString(), null == integer ? 0 : integer++);
            //进入等待状态
            ProcessOperationsWarpper processOperationsWarpper = new ProcessOperationsWarpper();
            processOperationsWarpper.setOrderId(order.getId());
            processOperationsWarpper.setState(401);
            try {
                orderService.driverProcessOperations(order.getDriverId(), processOperationsWarpper);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if(50 >= wgs84 && 12 > (null == num ? 0 : num)){
            Integer integer = map.get(order.getId().toString());
            map.put(order.getId().toString(), null == integer ? 0 : integer++);
        }
    }
    /**
     * 获取订单坐标数据
     * @param orderId
     * @param orderType
     * @return
     * @throws Exception
     */
    @Override
    public List<OrderPositionWarpper> queryPosition(Integer orderId, Integer orderType) throws Exception {
        //将数据存储到文件中
        File file = new File(filePath + orderId + ".json");
        if(!file.exists()){
            System.err.println("不存在");
            return new ArrayList<>();
        }
        //读取文件(字符流)
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
        //循环取出数据
        String str = null;
        StringBuffer sb = new StringBuffer();
        while ((str = in.readLine()) != null) {
            sb.append(str);
        }
        List<OrderPositionWarpper> list = new ArrayList<>();
        if(ToolUtil.isNotEmpty(sb.toString())){
            list = JSONArray.parseArray(sb.toString(), OrderPositionWarpper.class);
        }
        return list;
    }
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderRefusalServiceImpl.java
New file
@@ -0,0 +1,16 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.modular.system.dao.OrderRefusalMapper;
import com.agentdriving.driver.modular.system.model.OrderRefusal;
import com.agentdriving.driver.modular.system.service.IOrderRefusalService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* 司机拒单
* @author pzb
* @Date 2023/2/22 10:28
*/
@Service
public class OrderRefusalServiceImpl extends ServiceImpl<OrderRefusalMapper, OrderRefusal> implements IOrderRefusalService {
}
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java
New file
@@ -0,0 +1,1637 @@
package com.agentdriving.driver.modular.system.service.impl;
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.dao.OrderMapper;
import com.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.*;
import com.agentdriving.driver.modular.system.util.GaoDe.MapUtil;
import com.agentdriving.driver.modular.system.util.GaoDe.model.District;
import com.agentdriving.driver.modular.system.util.juhe.WeatherUtil;
import com.agentdriving.driver.modular.system.util.mongodb.model.Location;
import com.agentdriving.driver.modular.system.warpper.*;
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.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.*;
import com.agentdriving.driver.modular.system.warpper.*;
import com.agentdriving.driver.modular.system.util.PushUtil;
import com.agentdriving.driver.modular.system.warpper.AddOrderWarpper;
import com.agentdriving.driver.modular.system.warpper.HallOrderList;
import com.agentdriving.driver.modular.system.warpper.OrderInfoWarpper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
/**
* 订单
* @author pzb
* @Date 2023/2/16 15:57
*/
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
    @Autowired
    private IDriverWorkService driverWorkService;
    @Autowired
    private IDriverService driverService;
    @Autowired
    private ISystemConfigService systemConfigService;
    @Autowired
    private PushUtil pushUtil;
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private ISystemMessageService systemMessageService;
    @Autowired
    private IOrderRefusalService orderRefusalService;
    @Autowired
    private IYouTuiDriverService youTuiDriverService;
    @Autowired
    private IWeatherCityService weatherCityService;
    @Autowired
    private IOrderTransferService orderTransferService;
    @Autowired
    private ICancelOrderService cancelOrderService;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
    @Autowired
    private IRevenueService revenueService;
    @Autowired
    private ICouponService couponService;
    @Autowired
    private IUserToCouponService userToCouponService;
    private Map<String, Timer> timerMap = new HashMap<>();
    /**
     * 获取服务中的订单id
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public Map<String, Object> queryDriverServerOrder(Integer uid) throws Exception {
        Order order = this.selectOne(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1)
                .in("state", Arrays.asList(102, 103, 104, 105, 106, 401)));
        Map<String, Object> map = new HashMap<>();
        if(null != order){
            map.put("id", order.getId());
            map.put("state", order.getState());
        }
        return map;
    }
    /**
     * 司机代客下单
     * @param uid
     * @param addOrderWarpper
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverAddOrder(Integer uid, AddOrderWarpper addOrderWarpper) throws Exception {
        /**
         * 司机上线且空闲,下单直接给当前司机,其余进大厅
         * 司机下的订单不需要创建新用户,且只能走线下支付
         */
        int count = this.selectCount(new EntityWrapper<Order>().eq("userPhone", addOrderWarpper.getPhone()).eq("status", 1).in("state", Arrays.asList(101, 102, 103, 104, 105, 106, 201)));
        if(count > 0){
            return ResultUtil.error("该用户还有未完成的订单", "");
        }
        Driver driver = driverService.selectById(uid);
        DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
        Order order1 = this.selectOne(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401)));
        Order order = new Order();
        if(driverWork != null && null == order1){
            order.setDriverId(uid);
            driver.setServerStatus(2);
            order.setOrderTakingTime(new Date());
        }
        order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(3));
        order.setSource(2);
        AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>().eq("phone", addOrderWarpper.getPhone()).eq("status", 1));
        if(null != appUser){
            order.setUserId(appUser.getId());
        }
        order.setUserName(addOrderWarpper.getUserName());
        order.setUserPhone(addOrderWarpper.getPhone());
        order.setAgentId(driver.getAgentId());
        order.setBranchOfficeId(driver.getBranchOfficeId());
        order.setStartAddress(addOrderWarpper.getStartAddress());
        order.setStartLat(addOrderWarpper.getStartLat());
        order.setStartLng(addOrderWarpper.getStartLng());
        order.setEndAddress(addOrderWarpper.getEndAddress());
        order.setEndLat(addOrderWarpper.getEndLat());
        order.setEndLng(addOrderWarpper.getEndLng());
        Double d = 0D;
        if(ToolUtil.isNotEmpty(addOrderWarpper.getEndAddress())){
            Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
            if(null == distance){
                return ResultUtil.error("获取预估距离出错", "");
            }
            d = Double.valueOf(distance.get("distance")) / 1000;
            order.setEstimatedMileage(d);
            order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60);
        }
        String city = "";
        District geocode = MapUtil.geocode(order.getStartLng(), order.getStartLat());
        if(null != geocode){
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order = getOrderPrice(1, d, 0, order, city);
        order.setState(null == order.getDriverId() ? 101 : 102);
        order.setStatus(1);
        order.setCreateTime(new Date());
        this.insert(order);
        driverService.updateById(driver);
        //推送状态
        if(null != order.getDriverId()){
            pushUtil.pushOrderStatus(uid, 2, order.getId(), order.getStatus());
        }else{
            //开始推单
            Order finalOrder = order;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    pushOrder(finalOrder);
                }
            }).start();
        }
        return ResultUtil.success(order.getState() == 102 ? order.getId() : null);
    }
    /**
     * 获取订单价格
     * @param type          计算类型(1=预估价,2=订单费)
     * @param distance      行驶公里
     * @param waitTime      等待时长
     * @param order         订单数据
     * @param city          查询天气的城市
     * @return
     */
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
        order = getOrderInitialPrice(order);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        if(null == systemConfig){
            if(type == 1){//预估金额
                order.setEstimatedPrice(0D);
            }
            if(type == 2){//订单金额
                order.setOrderMoney(0D);
            }
            return order;
        }
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
        JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
        Date date = new Date();
        for (int i = 0; i < chargeStandard.size(); i++) {
            JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
            String num1 = jsonObject1.getString("num1");
            String num2 = jsonObject1.getString("num2");
            Double num3 = jsonObject1.getDouble("num3");//起步里程
            Double num4 = jsonObject1.getDouble("num4");//起步价格
            Double num5 = jsonObject1.getDouble("num5");//超过公里
            Double num6 = jsonObject1.getDouble("num6");//超过num3每num5公里收取num6
            Double num7 = jsonObject1.getDouble("num7");//长途起始公里
            Double num8 = jsonObject1.getDouble("num8");//长途结束公里
            Double num9 = jsonObject1.getDouble("num9");//长途费
            Double num10 = jsonObject1.getDouble("num10");//超出长途里程每num10公里
            Double num11 = jsonObject1.getDouble("num11");//超过num8每num10公里收取num11
            String[] split = num1.split(":");
            Calendar s = Calendar.getInstance();
            s.setTime(date);
            s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
            s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
            s.set(Calendar.SECOND, 0);
            split = num2.split(":");
            Calendar e = Calendar.getInstance();
            e.setTime(date);
            e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
            e.set(Calendar.MINUTE, Integer.valueOf(split[1]));
            e.set(Calendar.SECOND, 0);
            if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
                if(num3.compareTo(distance) >= 0){//起步里程内
                    order.setStartDistance(distance);//起步里程
                    order.setStartPrice(num4);//起步价
                }else{
                    BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num3));//超出起步里程
                    BigDecimal divide = subtract.divide(new BigDecimal(num5), new MathContext(2, RoundingMode.HALF_EVEN));
                    BigDecimal multiply = divide.multiply(new BigDecimal(num6));
                    order.setStartDistance(num3);//起步里程
                    order.setStartPrice(num4);//起步价
                    order.setOverDriveDistance(subtract.doubleValue());//超出起步里程
                    order.setOverDrivePrice(multiply.doubleValue());//超出起步里程费
                    //计算长途费
                    if(distance.compareTo(num7) > 0){
                        order.setLongDistance(num7 + "-" + num8);//长途里程
                        order.setLongDistancePrice(num9);//长途费
                    }
                    //计算长途里程超出的部分
                    if(distance.compareTo(num8) > 0){
                        BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num8));
                        BigDecimal divide1 = subtract1.divide(new BigDecimal(num10), new MathContext(2, RoundingMode.HALF_EVEN));
                        BigDecimal multiply1 = divide1.multiply(new BigDecimal(num11));
                        order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
                        order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
                    }
                }
                break;
            }
        }
        //计算额外费用
        Integer num1 = extraCost.getInteger("num1");//等待时长
        Double num2 = extraCost.getDouble("num2");//等待费
        Integer num3 = extraCost.getInteger("num3");//等待超出时长
        Double num4 = extraCost.getDouble("num4");//等到超出时长费用单价 X/分钟
        Double num5 = extraCost.getDouble("num5");//恶劣天气公里
        Double num6 = extraCost.getDouble("num6");//恶劣天气费
        Double num7 = extraCost.getDouble("num7");//恶劣天气超出公里
        Double num8 = extraCost.getDouble("num8");//恶劣天气超出公里单价 X/公里
        Double num9 = extraCost.getDouble("num9");//恶劣天气最高收取金额
        //等待费用
        if(waitTime.compareTo(num1) >= 0){
            order.setWaitTime(num1);//等待时长
            order.setWaitTimePrice(num2);//等待费用
            Integer w = waitTime - num3;
            BigDecimal multiply = new BigDecimal(w).multiply(new BigDecimal(num4));
            order.setOutWaitTime(w);//等待时长超出分钟
            order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
        }
        //恶劣天气
        systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8));
        if(null != systemConfig) {
            JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent());
            Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价
            if(1 == num11){
                boolean badWeather = WeatherUtil.isBadWeather(city);
                if(badWeather){
                    order.setBadWeatherDistance(num5);//恶劣天气公里
                    order.setBadWeatherPrice(num6);//恶劣天气费
                    if(distance.compareTo(num7) > 0){
                        BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num7));
                        BigDecimal multiply = subtract.multiply(new BigDecimal(num8));
                        order.setOverBadWeatherDistance(subtract.doubleValue());//恶劣天气超出公里
                        order.setOverBadWeatherPrice(multiply.doubleValue());//恶劣天气超出公里费
                    }
                    double add = new BigDecimal(order.getOverBadWeatherPrice()).add(new BigDecimal(order.getBadWeatherPrice())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                    if(num9.compareTo(add) < 0){//超出最高金额(重新调整金额)
                        if(num9.compareTo(num6) < 0){//如果恶劣天气费大于最高金额
                            order.setBadWeatherPrice(num9);//恶劣天气费
                            order.setOverBadWeatherPrice(0D);//恶劣天气超出公里费
                        }else{
                            BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
                            order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
                        }
                    }
                }
            }
        }
        //计算折扣
        if(null != order.getUserId()){
        }
        //计算总金额
        BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() +
                order.getWaitTimePrice() + order.getOutWaitTimePrice() + order.getBadWeatherPrice() + order.getOverBadWeatherPrice() - order.getDiscountAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN);
        if(type == 1){//预估价
            order.setEstimatedPrice(bigDecimal.doubleValue());
        }
        if(type == 2){//订单金额
            order.setOrderMoney(bigDecimal.doubleValue());
        }
        return order;
    }
    /**
     * 初始订单费用
     * @param order
     * @return
     */
    public Order getOrderInitialPrice(Order order){
        order.setStartDistance(0D);//起步里程
        order.setStartPrice(0D);//起步价
        order.setOverDriveDistance(0D);//超出起步里程
        order.setOverDrivePrice(0D);//超出起步里程费
        order.setLongDistance("");//长途里程
        order.setLongDistancePrice(0D);//长途里程费
        order.setOverLongDistance(0D);//超出长途里程
        order.setOverLongDistancePrice(0d);//超出长途里程费
        order.setWaitTime(0);//等待时长
        order.setWaitTimePrice(0D);//等待费
        order.setOutWaitTime(0);//超出等待时长
        order.setOutWaitTimePrice(0D);//超出等待时长费
        order.setBadWeatherDistance(0D);//恶劣天气里程
        order.setBadWeatherPrice(0D);//恶劣天气里程费
        order.setOverBadWeatherDistance(0D);//恶劣天气超出里程
        order.setOverBadWeatherPrice(0D);//恶劣天气超出里程费
        order.setDiscountedPrice(0D);//优惠金额
        order.setCouponId(null);//优惠券
        order.setDiscountAmount(0D);//折扣优惠金额
        order.setDiscount(0D);//折扣
        return order;
    }
    /**
     * 订单推送逻辑
     * @param order
     */
    public void pushOrder(Order order){
        /**
         * 1.先找最大推单范围内的优推司机 -》 距离最近
         * 没有1 - 》
         *      2.按照后台推送配置在范围内查找合适司机
         *        合适司:积分 > 评分 > 距离
         *      3.司机没有接单直接将订单置入大厅
         */
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
        if(null == systemConfig){
            return;
        }
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        Double num3 = jsonObject.getDouble("num3");//推单最大范围
        Integer num4 = jsonObject.getInteger("num4");//接单时间
        String startLat = order.getStartLat();
        String startLng = order.getStartLng();
        //1
        //找到中心点
        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLng), Double.valueOf(startLat));
        Double num = num3 / 1000;//范围公里
        //构造半径
        Distance distanceR = new Distance(num, Metrics.KILOMETERS);
        //画圆
        Circle circle = new Circle(geoJsonPoint, distanceR);
        // 构造query对象
        Query query = Query.query(Criteria.where("location").withinSphere(circle));
        List<Location> locations = mongoTemplate.find(query, Location.class);
        List<Integer> driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
        Integer driver = null;
        YouTuiDriver youTuiDriver1 = null;
        if(driverIds.size() > 0){
            List<YouTuiDriver> youTuiDrivers = youTuiDriverService.selectList(new EntityWrapper<YouTuiDriver>().in("driverId", driverIds)
                    .eq("state", 2).last(" and (surplusQuantity > 0 or now() < endTime) and now() < failureTime"));
            Double d = null;
            for (YouTuiDriver youTuiDriver : youTuiDrivers) {
                String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId());
                if(ToolUtil.isEmpty(value)){
                    continue;
                }
                Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                Double wgs84 = distance.get("WGS84");
                if(d == null || d.compareTo(wgs84) > 0){
                    d = wgs84;
                    driver = youTuiDriver.getDriverId();
                    youTuiDriver1 = youTuiDriver;
                }
            }
        }
        if(null != youTuiDriver1 && youTuiDriver1.getType() == 1){
            youTuiDriver1.setSurplusQuantity(youTuiDriver1.getSurplusQuantity() - 1);
            youTuiDriverService.updateById(youTuiDriver1);
        }
        //开始范围查找
        if(null == driver){
            for (int i = 1; i < 4; i++) {
                if(null != driver){
                    break;
                }
                num = jsonObject.getDouble("num" + i) / 1000;//范围公里
                //构造半径
                distanceR = new Distance(num, Metrics.KILOMETERS);
                //画圆
                circle = new Circle(geoJsonPoint, distanceR);
                // 构造query对象
                query = Query.query(Criteria.where("location").withinSphere(circle));
                locations = mongoTemplate.find(query, Location.class);
                driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
                if(driverIds.size() > 0){
                    List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2).eq("serverStatus", 1).eq("status", 1).in("id", driverIds));
                    if(drivers.size() == 0){
                        continue;
                    }
                    Integer integral = null;
                    Double score = null;
                    Double d = null;
                    for (Driver driver1 : drivers) {
                        if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
                            integral = driver1.getIntegral();
                            score = driver1.getScore();
                            driver = driver1.getId();
                            continue;
                        }
                        if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) < 0){//积分相同对比评分
                            integral = driver1.getIntegral();
                            score = driver1.getScore();
                            driver = driver1.getId();
                            continue;
                        }
                        if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离
                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
                            if(ToolUtil.isEmpty(value)){
                                continue;
                            }
                            Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                            Double wgs84 = distance.get("WGS84");
                            if(d == null || d.compareTo(wgs84) > 0){
                                d = wgs84;
                                driver = driver1.getId();
                                continue;
                            }
                        }
                    }
                }
            }
        }
        if(null != driver){
            pushUtil.pushGrabOrder(driver, 2, order.getId(), num4);
            //创建定时任务处理订单到大厅
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    Order order1 = OrderServiceImpl.this.selectById(order.getId());
                    if(order1.getState() == 101 || order1.getState() == 201){
                        order1.setHallOrder(1);
                        OrderServiceImpl.this.updateById(order1);
                    }
                }
            }, num4 * 1000);
        }else{
            order.setHallOrder(1);
            this.updateById(order);
        }
    }
    /**
     * 获取大厅订单列表
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<HallOrderList> queryOrderHall(Integer uid, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        String value = redisUtil.getValue("DRIVER" + uid);
        List<HallOrderList> hallOrderLists = this.baseMapper.queryOrderHall(pageNum, pageSize);
        hallOrderLists.forEach(hallOrderList -> {
            if(ToolUtil.isEmpty(hallOrderList.getAvatar())){
                hallOrderList.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/66cc269703a84e4da87fb21e2c21ab1f.png");
            }
            hallOrderList.setCurrentDistance(0D);
            if(ToolUtil.isNotEmpty(value)){
                Map<String, Double> distance = GeodesyUtil.getDistance(hallOrderList.getStartLng() + "," + hallOrderList.getStartLat(), value);
                Double wgs84 = distance.get("WGS84");
                hallOrderList.setCurrentDistance(wgs84);
            }else{
                hallOrderList.setCurrentDistance(0D);
            }
        });
        return hallOrderLists;
    }
    /**
     * 司机拒单
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil rejectionOrder(Integer uid, Long orderId) throws Exception {
        Order order = this.selectById(orderId);
        DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
        if(null == driverWork){
            return ResultUtil.error("请先上班");
        }
        OrderRefusal orderRefusal = new OrderRefusal();
        orderRefusal.setCode(order.getCode());
        orderRefusal.setCreateTime(new Date());
        orderRefusal.setDriverId(uid);
        orderRefusal.setEndAddress(order.getEndAddress());
        orderRefusal.setStartAddress(order.getStartAddress());
        orderRefusal.setOrderId(orderId);
        orderRefusalService.insert(orderRefusal);
        Driver driver = driverService.selectById(uid);
        //扣除积分
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
        if(null != systemConfig) {
            //{"num1":"10:00","num2":"14:00","num3":10,"num4":10,"num5":10,"num6":10,"num7":10,"num8":10,"num9":5,"num10":5}
            //拒绝订单扣除积分
            Integer num10 = JSON.parseObject(systemConfig.getContent()).getInteger("num10");
            if (num10 > 0) {
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(uid);
                accountChangeDetail.setType(2);
                accountChangeDetail.setChangeType(2);
                accountChangeDetail.setOrderId(orderId);
                accountChangeDetail.setOldData(null == driver.getIntegral() ? 0 : driver.getIntegral().doubleValue());
                driver.setIntegral((null == driver.getIntegral() ? 0 : driver.getIntegral()) - num10);
                accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
                accountChangeDetail.setExplain("拒绝订单扣除积分");
                accountChangeDetailService.saveData(accountChangeDetail);
                driverService.updateById(driver);
            }
        }
        return ResultUtil.success();
    }
    /**
     * 司机接单操作
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil receiveOrder(Integer uid, Long orderId) throws Exception {
        try {
            Driver driver = driverService.selectById(uid);
            DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
            if(null == driverWork){
                return ResultUtil.error("请先上班");
            }
            List<Integer> state1 = Arrays.asList(102, 103, 104, 105, 106, 201, 401);
            int count = this.selectCount(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1).in("state", state1));
            if(count > 0){
                return ResultUtil.error("还有未完成的订单");
            }
            boolean lock = redisUtil.lock();
            if(!lock){
                return ResultUtil.error("请重试");
            }
            Order order = this.selectById(orderId);
            Integer state = order.getState();
            Integer oldDriverId = order.getDriverId();
            if(state == 301){
                redisUtil.unlock();
                return ResultUtil.error("订单已被取消");
            }
            if(state != 101 && state != 201){
                redisUtil.unlock();
                return ResultUtil.error("手速慢了哦");
            }
            order.setDriverId(uid);
            order.setAgentId(driver.getAgentId());
            order.setBranchOfficeId(driver.getBranchOfficeId());
            order.setState(102);
            order.setOrderTakingTime(new Date());
            this.updateById(order);
            redisUtil.unlock();
            if(null != order.getUserId()){
                AppUser appUser = appUserService.selectById(order.getUserId());
                appUser.setCancelCount(0);
                appUser.setIsException(1);
                appUserService.updateById(appUser);
            }
            driver.setServerStatus(2);
            driverService.updateById(driver);
            if(state == 201){//转单的订单
                //停止定时任务
                Timer timer = timerMap.get(order.getId().toString());
                if(null != timer){
                    timer.cancel();
                    timerMap.remove(order.getId().toString());
                }
                //原司机下班
                Driver oldDriver = driverService.selectById(oldDriverId);
                oldDriver.setServerStatus(1);
                driverService.updateById(oldDriver);
                DriverWork driverWork1 = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", oldDriverId).eq("status", 1));
                driverWork1.setStatus(2);
                driverWork1.setOffWorkTime(new Date());
                driverWorkService.updateById(driverWork1);
                //添加关系数据
                OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("orderId", order.getId()).eq("status", 1).isNull("successTime"));
                if(null != orderTransfer){
                    orderTransfer.setNewDriverId(uid);
                    orderTransfer.setSuccessTime(new Date());
                    orderTransferService.updateById(orderTransfer);
                }else{
                    orderTransfer = new OrderTransfer();
                    orderTransfer.setOrderId(order.getId());
                    orderTransfer.setOldDriverId(oldDriverId);
                    orderTransfer.setCreateTime(new Date());
                    orderTransfer.setStatus(1);
                    orderTransfer.setNewDriverId(uid);
                    orderTransfer.setSuccessTime(new Date());
                    orderTransferService.insert(orderTransfer);
                }
                pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId());
                pushUtil.pushTransferSuccessful(oldDriverId, 2, order.getId());
            }
            //推动订单数据
            pushOrderInfo(order.getId(), uid);//开始推送订单数据
            //发送系统消息
            systemMessageService.addSystemMessage(uid, 2, "接单成功", "您已成功接到用户订单,请尽快联系客户!");
            pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState());
            if(null != order.getUserId()){
                systemMessageService.addSystemMessage(order.getUserId(), 1, "接单成功", driver.getName() + "师傅已成功接到您的订单,请保持电话畅通!");
                pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
            }
        }catch (Exception e){
            redisUtil.unlock();
            e.printStackTrace();
            throw e;
        }
        return ResultUtil.success();
    }
    /**
     * 获取订单详情
     * @param orderId
     * @return
     * @throws Exception
     */
    @Override
    public OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception {
        OrderInfoWarpper orderInfoWarpper = this.baseMapper.queryOrderInfo(orderId);
        if(orderInfoWarpper.getTravelTime() == null){
            orderInfoWarpper.setTravelTime(0);
        }
        AppUser appUser = appUserService.selectById(orderInfoWarpper.getUserId());
        orderInfoWarpper.setBalance(null == appUser ? 0D : appUser.getAccountBalance());
        orderInfoWarpper.setCurrentDistance(0D);
        if(ToolUtil.isEmpty(orderInfoWarpper.getAvatar())){
            orderInfoWarpper.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/66cc269703a84e4da87fb21e2c21ab1f.png");
        }
        String value = redisUtil.getValue("DRIVER" + uid);
        orderInfoWarpper.setPickUpTime(0);
        if(ToolUtil.isNotEmpty(value)){
            Map<String, Double> distance = GeodesyUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value);
            Double wgs84 = distance.get("WGS84");
            orderInfoWarpper.setCurrentDistance(null == wgs84 ? 0d : wgs84);
            Map<String, String> distance1 = MapUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value, 0);
            orderInfoWarpper.setPickUpTime(Integer.valueOf(distance1.get("duration")) / 60);
        }
        return orderInfoWarpper;
    }
    /**
     * 司机走订单流程
     * @param uid
     * @param processOperationsWarpper
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverProcessOperations(Integer uid, ProcessOperationsWarpper processOperationsWarpper) throws Exception {
        //101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待支付,108=待评价,109=已完成,201=转单中,301=已取消,401=等待中
        Order order = this.selectById(processOperationsWarpper.getOrderId());
        if(order.getState() == processOperationsWarpper.getState()){
            return ResultUtil.error("不能重复操作");
        }
        if(order.getState() == 201){
            return ResultUtil.error("订单正在转单中");
        }
        if(order.getState() == 301){
            redisUtil.unlock();
            return ResultUtil.error("订单已被取消");
        }
        order.setState(processOperationsWarpper.getState());
        switch (processOperationsWarpper.getState()){
            case 103:
                order.setGoToAppointmentPointTime(new Date());
                break;
            case 104:
                order.setStartWaitTime(new Date());
                order.setArrivalTimeAtTheAppointmentPoint(new Date());
                break;
            case 105:
                if(null == order.getStartTime()){
                    redisUtil.addSetValue("serverOrder", order.getId().toString());//存入缓存用于计算实时距离
                    order.setBoardingTime(new Date());
                    order.setStartTime(new Date());
                }
                //计算等待用户时长
                Integer w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).intValue();
                order.setWaitTime(order.getWaitTime() + w);
                order.setStartWaitTime(null);
                break;
            case 106:
                order.setGetoffTime(new Date());
                if(ToolUtil.isEmpty(order.getEndAddress())){
                    order.setEndAddress(processOperationsWarpper.getEndAddress());
                    order.setEndLng(processOperationsWarpper.getEndLng());
                    order.setEndLat(processOperationsWarpper.getEndLat());
                }
                //开始计算费用
                String city = "";
                District geocode = MapUtil.geocode(order.getEndLng(), order.getEndLat());
                if(null != geocode){
                    WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
                            .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
                    city = null != weatherCity ? weatherCity.getId().toString() : "";
                }
                order = getOrderPrice(2, Double.valueOf(order.getActualMileage() / 1000), order.getWaitTime(), order, city);
                //修改司机状态和积分
                Driver driver = driverService.selectById(order.getDriverId());
                driver.setServerStatus(1);
                driverService.updateById(driver);
                saveIntegral(order);
                break;
            case 401:
                order.setStartWaitTime(new Date());
                break;
        }
        this.updateAllColumnById(order);
        //推送订单状态
        pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState());
        if(null != order.getUserId()){
            pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
        }
        return ResultUtil.success();
    }
    /**
     * 添加订单积分奖励
     * @param order
     * @throws Exception
     */
    public void saveIntegral(Order order) throws Exception{
        Driver driver = driverService.selectById(order.getDriverId());
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
        if(null != systemConfig){
            //{"num1":"10:00","num2":"14:00","num3":10,"num4":10,"num5":10,"num6":10,"num7":10,"num8":10,"num9":5,"num10":5}
            //完成订单奖励
            Integer num5 = JSON.parseObject(systemConfig.getContent()).getInteger("num5");
            if(num5 > 0){
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(order.getDriverId());
                accountChangeDetail.setType(2);
                accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
                driver.setIntegral(driver.getIntegral() + num5);
                accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
                accountChangeDetail.setExplain("完成订单奖励");
                accountChangeDetailService.saveData(accountChangeDetail);
            }
            //恶劣天气完成订单奖励
            Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8");
            if(num8 > 0){
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(order.getDriverId());
                accountChangeDetail.setType(2);
                accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
                driver.setIntegral(driver.getIntegral() + num8);
                accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
                accountChangeDetail.setExplain("恶劣天气完成订单奖励");
                accountChangeDetailService.saveData(accountChangeDetail);
            }
            driverService.updateById(driver);
            if(null == order.getUserId()){
                return;
            }
            //推荐用户首单完成奖励
            Integer num4 = JSON.parseObject(systemConfig.getContent()).getInteger("num4");
            if(num4 > 0){
                List<Integer> state = Arrays.asList(105);
                int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
                if(count > 1){
                    return;
                }
                AppUser appUser = appUserService.selectById(order.getUserId());
                if(null != appUser && null != appUser.getInviterType()){
                    if(appUser.getInviterType() == 1){
                        return;
                    }
                    Driver driver1 = driverService.selectById(appUser.getInviterId());
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(driver1.getId());
                    accountChangeDetail.setType(2);
                    accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
                    driver1.setIntegral(driver1.getIntegral() + num4);
                    accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
                    accountChangeDetail.setExplain("推荐用户完成首单奖励");
                    accountChangeDetailService.saveData(accountChangeDetail);
                    driverService.updateById(driver1);
                }
            }
        }
    }
    /**
     * 定时任务推送订单数据
     * @param orderId
     * @param uid
     */
    public void pushOrderInfo(Long orderId, Integer uid){
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                String value = redisUtil.getValue("DRIVER" + uid);
                Order order = OrderServiceImpl.this.selectById(orderId);
                if(order.getState() == 106 || order.getState() == 301){
                    Timer timer = timerMap.get(order.getId().toString());
                    if(null != timer){
                        timer.cancel();
                        timerMap.remove(order.getId().toString());
                    }
                }
                PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
                pushOrderInfoWarpper.setId(orderId);
                if(ToolUtil.isNotEmpty(value)){
                    String[] split = value.split(",");
                    pushOrderInfoWarpper.setDriverLat(split[1]);
                    pushOrderInfoWarpper.setDriverLng(split[0]);
                }
                int w = 0;
                if(null != order.getStartWaitTime()){
                    w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).intValue();
                }
                pushOrderInfoWarpper.setWaitTime(order.getWaitTime() + w);
                pushOrderInfoWarpper.setState(order.getState());
                pushOrderInfoWarpper.setActualMileage(Double.valueOf(order.getActualMileage() / 1000));
                pushOrderInfoWarpper.setTravelTime(0);
                if(null != order.getStartTime()){
                    int travelTime = Double.valueOf((System.currentTimeMillis() - order.getStartTime().getTime()) / 60000).intValue();
                    pushOrderInfoWarpper.setTravelTime(travelTime);
                }
                if(null != order.getUserId()){
                    pushUtil.pushOrderInfo(order.getUserId(), 1, pushOrderInfoWarpper);
                }
                if(order.getState() == 301){//司机取消不推送给司机
                    CancelOrder cancelOrder = cancelOrderService.selectOne(new EntityWrapper<CancelOrder>().eq("orderId", order.getId()).eq("status", 1));
                    if(null != cancelOrder && cancelOrder.getUserType() == 2){
                        return;
                    }
                }
                pushUtil.pushOrderInfo(uid, 2, pushOrderInfoWarpper);
            }
        },0, 10000);
        timerMap.put(orderId.toString(), timer);
    }
    /**
     * 司机转单操作
     * @param uid
     * @param orderId
     * @param cause
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil transferOrder(Integer uid, Long orderId, String cause) throws Exception {
        Order order = this.selectById(orderId);
        if(order.getDriverId().compareTo(uid) != 0){
            return ResultUtil.error("无权操作");
        }
        if(order.getState() > 104){
            return ResultUtil.error("订单不支持转单");
        }
        order.setOldState(order.getState());
        order.setState(201);
        this.updateById(order);
        OrderTransfer orderTransfer = new OrderTransfer();
        orderTransfer.setOrderId(orderId);
        orderTransfer.setOldDriverId(order.getDriverId());
        orderTransfer.setCause(cause);
        orderTransfer.setStatus(1);
        orderTransfer.setCreateTime(new Date());
        orderTransferService.insert(orderTransfer);
        //开始派单
        Order finalOrder = order;
        new Thread(new Runnable() {
            @Override
            public void run() {
                pushOrder(finalOrder);
            }
        }).start();
        return ResultUtil.success();
    }
    /**
     * 司机修改订单终点
     * @param uid
     * @param orderEndAddressWarpper
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil setOrderEndAddress(Integer uid, OrderEndAddressWarpper orderEndAddressWarpper) throws Exception {
        Order order = this.selectById(orderEndAddressWarpper.getOrderId());
        order.setEndLat(orderEndAddressWarpper.getEndLat());
        order.setEndLng(orderEndAddressWarpper.getEndLng());
        order.setEndAddress(orderEndAddressWarpper.getEndAddress());
        Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
        if(null == distance){
            return ResultUtil.error("获取预估距离出错");
        }
        Double d = Double.valueOf(distance.get("distance")) / 1000;
        order.setEstimatedMileage(d);
        order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60);
        String city = "";
        District geocode = MapUtil.geocode(order.getStartLng(), order.getStartLat());
        if(null != geocode){
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order = getOrderPrice(1, d, 0, order, city);
        this.updateById(order);
        return ResultUtil.success();
    }
    /**
     * 司机取消转到操作
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil cancelTransferOrder(Integer uid, Long orderId) throws Exception {
        Order order = this.selectById(orderId);
        if(order.getState() != 201){
            return ResultUtil.error("不能取消转单");
        }
        order.setState(order.getOldState());
        order.setOldState(null);
        this.updateAllColumnById(order);
        OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("orderId", orderId)
                .eq("status", 1).isNull("successTime").orderBy("createTime desc limit 0, 1"));
        if(null != orderTransfer){
            orderTransfer.setStatus(3);
            orderTransferService.updateById(orderTransfer);
        }
        return ResultUtil.success();
    }
    /**
     * 司机取消订单
     * @param uid
     * @param orderId
     * @param cause
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverCancelOrder(Integer uid, Long orderId, String cause) throws Exception {
        Order order = this.selectById(orderId);
        if(uid.compareTo(order.getDriverId()) != 0){
            return ResultUtil.error("无法取消订单");
        }
        if(order.getState() > 105){
            return ResultUtil.error("无法取消订单");
        }
        order.setState(301);
        this.updateById(order);
        CancelOrder cancelOrder = new CancelOrder();
        cancelOrder.setOrderId(orderId);
        cancelOrder.setUserType(2);
        cancelOrder.setUserId(uid);
        cancelOrder.setCause(cause);
        cancelOrder.setStatus(1);
        cancelOrder.setCreateTime(new Date());
        cancelOrderService.insert(cancelOrder);
        Driver driver = driverService.selectById(order.getDriverId());
        if(null != driver){
            driver.setServerStatus(1);
            driverService.updateById(driver);
        }
        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus());
        return ResultUtil.success();
    }
    /**
     * 获取订单费用明细
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    @Override
    public OrderPriceWarpper queryOrderPrice(Integer uid, Long orderId) throws Exception {
        Driver driver = driverService.selectById(uid);
        Order order = this.selectById(orderId);
        OrderPriceWarpper orderPriceWarpper = new OrderPriceWarpper();
        BeanUtils.copyProperties(order, orderPriceWarpper);
        orderPriceWarpper.setWaitTime(orderPriceWarpper.getWaitTime() + orderPriceWarpper.getOutWaitTime());
        orderPriceWarpper.setWaitTimePrice(orderPriceWarpper.getWaitTimePrice() + orderPriceWarpper.getOutWaitTimePrice());
        orderPriceWarpper.setLongDistance(0D);
        if(ToolUtil.isNotEmpty(order.getLongDistance())){
            String[] split = order.getLongDistance().split("-");
            Double longDistanc = Double.valueOf(split[1]) - Double.valueOf(split[0]) + orderPriceWarpper.getOverLongDistance();
            orderPriceWarpper.setLongDistance(longDistanc);
        }
        orderPriceWarpper.setLongDistancePrice(orderPriceWarpper.getLongDistancePrice() + orderPriceWarpper.getOverLongDistancePrice());
        orderPriceWarpper.setBadWeatherDistance(orderPriceWarpper.getBadWeatherDistance() + orderPriceWarpper.getOverBadWeatherDistance());
        orderPriceWarpper.setBadWeatherPrice(orderPriceWarpper.getBadWeatherPrice() + orderPriceWarpper.getOverBadWeatherPrice());
        orderPriceWarpper.setActualMileage(new BigDecimal(order.getActualMileage() / 1000).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
        orderPriceWarpper.setTravelTime(0);
        if(null != order.getGetoffTime()){
            orderPriceWarpper.setTravelTime(Double.valueOf((order.getGetoffTime().getTime() - order.getStartTime().getTime()) / 60000).intValue());
        }
        orderPriceWarpper.setWxCollectionCode(driver.getWxCollectionCode());
        orderPriceWarpper.setZfbCollectionCode(driver.getZfbCollectionCode());
        return orderPriceWarpper;
    }
    /**
     * 修改订单状态
     * @param uid
     * @param orderId
     * @param state
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception {
        List<Integer> s = Arrays.asList(107, 108);
        if(!s.contains(state)){
            return ResultUtil.error("操作失败");
        }
        Order order = this.selectById(orderId);
        order.setState(state);
        if(payType == 2 && state == 107){
            order.setPayType(3);
            Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
            if(null != coupon){
                order.setCouponId(coupon.getId());
                order.setDiscountAmount(coupon.getCouponPreferentialAmount());
                order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount());
            }
        }
        if(payType == 2 && state == 108){
            order.setPayTime(new Date());
            if(null != order.getCouponId()){
                UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
                if(userToCoupon.getValidCount() > 0){
                    userToCoupon.setValidCount(userToCoupon.getValidCount() - 1);
                    userToCouponService.updateById(userToCoupon);
                    Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
                    order.setPayMoney(order.getPayMoney() - coupon.getCouponPreferentialAmount());
                    order.setCouponId(coupon.getId());
                    order.setDiscountedPrice(coupon.getCouponPreferentialAmount());
                    Driver driver = driverService.selectById(order.getDriverId());
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(order.getDriverId());
                    accountChangeDetail.setCreateTime(new Date());
                    accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    accountChangeDetail.setType(1);
                    accountChangeDetail.setChangeType(7);
                    accountChangeDetail.setOrderId(order.getId());
                    accountChangeDetail.setExplain("优惠券收入");
                    driver.setCouponBalance(driver.getCouponBalance() + coupon.getCouponPreferentialAmount());
                    accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                    driverService.updateById(driver);
                    accountChangeDetailService.insert(accountChangeDetail);
                }
            }
        }
        this.updateById(order);
        if(state == 108){//计算抽成
            saveRevenue(order);
        }
        PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
        pushOrderInfoWarpper.setId(order.getId());
        pushOrderInfoWarpper.setState(order.getState());
        pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
        if(null != order.getUserId()){
            pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
        }
        return ResultUtil.success();
    }
    /**
     * 计算抽成和分佣
     * @param order
     */
    public void saveRevenue(Order order) throws Exception{
        //司机收入和代理商抽成(先分佣,后抽成)
        //司机分佣和司机推荐用户首单奖励都在平台的抽佣中扣除,剩余的为平台抽佣。
        Driver driver = driverService.selectById(order.getDriverId());
        AppUser appUser = appUserService.selectById(order.getUserId());
        Double payMoney = order.getPayMoney();
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
        Double n = 0D;
        if(null != systemConfig){
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
            Double num2 = jsonObject.getDouble("num2");
            Double num3 = jsonObject.getDouble("num3");
            n = num3;
            if(order.getPayMoney() >= num2){
                payMoney = payMoney - num3;//司机收入
                SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 2));
                if(null != systemConfig1){
                    JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent());
                    //司机推荐首单收入
                    List<Integer> state = Arrays.asList(108, 109);
                    int count = this.selectCount(new EntityWrapper<Order>().eq("userId", appUser.getId()).eq("status", 1).in("state", state));
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
                        Double num1 = jsonObject1.getDouble("num1");
                        num1 = (num3 >= num1 ? num1 : num3);
                        if(num1 > 0){
                            Driver driver1 = driverService.selectById(appUser.getInviterId());
                            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                            accountChangeDetail.setUserType(2);
                            accountChangeDetail.setUserId(driver1.getId());
                            accountChangeDetail.setType(1);
                            accountChangeDetail.setChangeType(5);
                            accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                            accountChangeDetail.setExplain("订单分佣收入");
                            accountChangeDetail.setCreateTime(new Date());
                            driver1.setCommission(driver1.getCommission() + num1);
                            accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                            driverService.updateById(driver1);
                            accountChangeDetailService.saveData(accountChangeDetail);
                            Revenue revenue = new Revenue();
                            revenue.setType(2);
                            revenue.setUserType(2);
                            revenue.setUserId(driver1.getId());
                            revenue.setOrderId(order.getId());
                            revenue.setAmount(num1);
                            revenue.setCreateTime(new Date());
                            revenueService.insert(revenue);
                        }
                        num3 = (num3 >= num1 ? num3 - num1 : 0);
                    }
                    //开始处理层级抽佣
                    if(null != driver.getInviterType() && driver.getInviterType() == 2){
                        Driver driver1 = driverService.selectById(driver.getInviterId());//一级司机
                        if(null != driver1 && null != driver1.getInviterType() && driver1.getInviterType() == 2){
                            Driver driver2 = driverService.selectById(driver1.getInviterId());//二级司机
                            if(null != driver2 && null != driver2.getInviterType() && driver2.getInviterType() == 2){
                                Driver driver3 = driverService.selectById(driver2.getInviterId());//三级级司机
                                Double num5 = jsonObject1.getDouble("num5");
                                Double num6 = jsonObject1.getDouble("num6");
                                Double num7 = jsonObject1.getDouble("num7");
                                num5 = (num3 >= num5 ? num5 : num3);
                                if(num5 > 0){
                                    Revenue revenue = new Revenue();
                                    revenue.setType(2);
                                    revenue.setUserType(2);
                                    revenue.setUserId(driver1.getId());
                                    revenue.setOrderId(order.getId());
                                    revenue.setAmount(num5);
                                    revenue.setCreateTime(new Date());
                                    revenueService.insert(revenue);
                                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                                    accountChangeDetail.setUserType(2);
                                    accountChangeDetail.setUserId(driver1.getId());
                                    accountChangeDetail.setType(1);
                                    accountChangeDetail.setChangeType(5);
                                    accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                    accountChangeDetail.setExplain("订单分佣收入");
                                    accountChangeDetail.setCreateTime(new Date());
                                    driver1.setCommission(driver1.getCommission() + num5);
                                    accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                    driverService.updateById(driver1);
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    num3 = (num3 >= num5 ? num3 - num5 : 0);
                                }
                                num6 = (num3 >= num6 ? num6 : num3);
                                if(num6 > 0){
                                    Revenue revenue = new Revenue();
                                    revenue.setType(2);
                                    revenue.setUserType(2);
                                    revenue.setUserId(driver2.getId());
                                    revenue.setOrderId(order.getId());
                                    revenue.setAmount(num6);
                                    revenue.setCreateTime(new Date());
                                    revenueService.insert(revenue);
                                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                                    accountChangeDetail.setUserType(2);
                                    accountChangeDetail.setUserId(driver2.getId());
                                    accountChangeDetail.setType(1);
                                    accountChangeDetail.setChangeType(5);
                                    accountChangeDetail.setOldData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission());
                                    accountChangeDetail.setExplain("订单分佣收入");
                                    accountChangeDetail.setCreateTime(new Date());
                                    driver2.setCommission(driver2.getCommission() + num6);
                                    accountChangeDetail.setNewData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission());
                                    driverService.updateById(driver2);
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    num3 = (num3 >= num6 ? num3 - num6 : 0);
                                }
                                num7 = (num3 >= num7 ? num7 : num3);
                                if(num7 > 0){
                                    Revenue revenue = new Revenue();
                                    revenue.setType(2);
                                    revenue.setUserType(2);
                                    revenue.setUserId(driver3.getId());
                                    revenue.setOrderId(order.getId());
                                    revenue.setAmount(num7);
                                    revenue.setCreateTime(new Date());
                                    revenueService.insert(revenue);
                                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                                    accountChangeDetail.setUserType(2);
                                    accountChangeDetail.setUserId(driver3.getId());
                                    accountChangeDetail.setType(1);
                                    accountChangeDetail.setChangeType(5);
                                    accountChangeDetail.setOldData(driver3.getBalance() + driver3.getBackgroundBalance() + driver3.getCouponBalance() + driver3.getCommission());
                                    accountChangeDetail.setExplain("订单分佣收入");
                                    accountChangeDetail.setCreateTime(new Date());
                                    driver3.setCommission(driver3.getCommission() + num7);
                                    accountChangeDetail.setNewData(driver3.getBalance() + driver3.getBackgroundBalance() + driver3.getCouponBalance() + driver3.getCommission());
                                    driverService.updateById(driver3);
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    num3 = (num3 >= num7 ? num3 - num7 : 0);
                                }
                            }else{
                                Double num3_ = jsonObject1.getDouble("num3");
                                Double num4 = jsonObject1.getDouble("num4");
                                num3_ = (num3 >= num3_ ? num3_ : num3);
                                if(num3_ > 0){
                                    Revenue revenue = new Revenue();
                                    revenue.setType(2);
                                    revenue.setUserType(2);
                                    revenue.setUserId(driver1.getId());
                                    revenue.setOrderId(order.getId());
                                    revenue.setAmount(num3_);
                                    revenue.setCreateTime(new Date());
                                    revenueService.insert(revenue);
                                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                                    accountChangeDetail.setUserType(2);
                                    accountChangeDetail.setUserId(driver1.getId());
                                    accountChangeDetail.setType(1);
                                    accountChangeDetail.setChangeType(5);
                                    accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                    accountChangeDetail.setExplain("订单分佣收入");
                                    accountChangeDetail.setCreateTime(new Date());
                                    driver1.setCommission(driver1.getCommission() + num3_);
                                    accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                    driverService.updateById(driver1);
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    num3 = (num3 >= num3_ ? num3 - num3_ : 0);
                                }
                                num4 = (num3 >= num4 ? num4 : num3);
                                if(num4 > 0){
                                    Revenue revenue = new Revenue();
                                    revenue.setType(2);
                                    revenue.setUserType(2);
                                    revenue.setUserId(driver2.getId());
                                    revenue.setOrderId(order.getId());
                                    revenue.setAmount(num4);
                                    revenue.setCreateTime(new Date());
                                    revenueService.insert(revenue);
                                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                                    accountChangeDetail.setUserType(2);
                                    accountChangeDetail.setUserId(driver2.getId());
                                    accountChangeDetail.setType(1);
                                    accountChangeDetail.setChangeType(5);
                                    accountChangeDetail.setOldData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission());
                                    accountChangeDetail.setExplain("订单分佣收入");
                                    accountChangeDetail.setCreateTime(new Date());
                                    driver2.setCommission(driver2.getCommission() + num4);
                                    accountChangeDetail.setNewData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission());
                                    driverService.updateById(driver2);
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    num3 = (num3 >= num4 ? num3 - num4 : 0);
                                }
                            }
                        }else{
                            Double num2_ = jsonObject1.getDouble("num2");
                            num2_ = (num3 >= num2_ ? num2_ : num3);
                            if(num2_ > 0){
                                Revenue revenue = new Revenue();
                                revenue.setType(2);
                                revenue.setUserType(2);
                                revenue.setUserId(driver1.getId());
                                revenue.setOrderId(order.getId());
                                revenue.setAmount(num2_);
                                revenue.setCreateTime(new Date());
                                revenueService.insert(revenue);
                                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                                accountChangeDetail.setUserType(2);
                                accountChangeDetail.setUserId(driver1.getId());
                                accountChangeDetail.setType(1);
                                accountChangeDetail.setChangeType(5);
                                accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                accountChangeDetail.setExplain("订单分佣收入");
                                accountChangeDetail.setCreateTime(new Date());
                                driver1.setCommission(driver1.getCommission() + num2_);
                                accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission());
                                driverService.updateById(driver1);
                                accountChangeDetailService.saveData(accountChangeDetail);
                                num3 = (num3 >= num2_ ? num3 - num2_ : 0);
                            }
                        }
                    }
                    //处理代理商抽佣
                    if(num3 > 0){
                        Revenue revenue = new Revenue();
                        revenue.setType(1);
                        revenue.setUserType(3);
                        revenue.setUserId(driver.getAgentId());
                        revenue.setOrderId(order.getId());
                        revenue.setAmount(num3);
                        revenue.setCreateTime(new Date());
                        revenueService.insert(revenue);
                    }
                }
            }
        }
        //司机余额扣减抽佣金额
        if(n > 0){
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
            accountChangeDetail.setUserId(driver.getId());
            accountChangeDetail.setType(1);
            accountChangeDetail.setChangeType(9);
            accountChangeDetail.setOrderId(order.getId());
            accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            accountChangeDetail.setExplain("线下收款服务费支出");
            accountChangeDetail.setCreateTime(new Date());
            driver.setBalance(driver.getBalance() - n);
            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            driverService.updateById(driver);
            accountChangeDetailService.saveData(accountChangeDetail);
        }
    }
    /**
     * 获取司机的订单列表
     * @param driverId
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<DriverOrderListWarpper> queryDriverOrderList(Integer driverId, Integer state, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        return this.baseMapper.queryDriverOrderList(driverId, state, pageNum, pageSize);
    }
    /**
     * 司机邀请列表
     * @param driverId
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<InviteListWarpper> queryInviteList(Integer driverId, String time, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        return this.baseMapper.queryInviteList(driverId, time, pageNum, pageSize);
    }
    /**
     * 获取业绩汇总数据
     * @param driverId
     * @return
     * @throws Exception
     */
    @Override
    public PerformanceSummaryWarpper queryPerformanceSummary(Integer driverId, Integer type, String time, Integer dayType) throws Exception {
        Driver driver = driverService.selectById(driverId);
        PerformanceSummaryWarpper performanceSummaryWarpper = new PerformanceSummaryWarpper();
        BeanUtils.copyProperties(driver, performanceSummaryWarpper);
        Double amount = revenueService.queryTotalAmount(driverId);
        performanceSummaryWarpper.setGrossIncome(amount);
        List<Integer> state = Arrays.asList(107, 108, 109);
        int count = this.selectCount(new EntityWrapper<Order>().eq("driverId", driverId).in("state", state).eq("status", 1));
        performanceSummaryWarpper.setTotalOrder(count);
        int position = 0;
        List<PerformanceRankingWarpper> performanceRankingWarppers = null;
        if(type == 1){//订单量
            performanceRankingWarppers = this.baseMapper.queryDriverRank(time, dayType);
        }
        if(type == 2){//佣金
            performanceRankingWarppers = revenueService.queryDriverRank(2, time, dayType);
        }
        if(type == 3){//收入
            performanceRankingWarppers = revenueService.queryDriverRank(1, time, dayType);
        }
        for (int i = 0; i < performanceRankingWarppers.size(); i++) {
            PerformanceRankingWarpper performanceRankingWarpper = performanceRankingWarppers.get(i);
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                position = i + 1;
                break;
            }
        }
        performanceSummaryWarpper.setPosition(position);
        performanceSummaryWarpper.setList(performanceRankingWarppers.size() > 10 ? performanceRankingWarppers.subList(0, 10) : performanceRankingWarppers.subList(0, performanceRankingWarppers.size()));
        return performanceSummaryWarpper;
    }
    /**
     * 获取我的业绩
     * @param driverId
     * @param time
     * @return
     * @throws Exception
     */
    @Override
    public List<MyAchievementWarpper> queryMyAchievement(Integer driverId, String time) throws Exception {
        List<MyAchievementWarpper> list = new ArrayList<>();
//        time = time.replaceAll("-", "年");
        //订单量
        List<PerformanceRankingWarpper> performanceRankingWarppers = this.baseMapper.queryDriverRank(time, 2);
        int position = 0;
        Double d = 0D;
        for (int i = 0; i < performanceRankingWarppers.size(); i++) {
            PerformanceRankingWarpper performanceRankingWarpper = performanceRankingWarppers.get(i);
            Double amountOfData = performanceRankingWarpper.getAmountOfData();
            if(amountOfData.compareTo(d) != 0){
                position++;
                d = amountOfData;
            }
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
        }
        MyAchievementWarpper myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("订单");
        myAchievementWarpper.setTime(time);
        myAchievementWarpper.setRank(position);
        myAchievementWarpper.setAmountOfData(d);
        list.add(myAchievementWarpper);
        //收入
        performanceRankingWarppers = revenueService.queryDriverRank(null, time, 2);
        position = 0;
        d = 0D;
        for (int i = 0; i < performanceRankingWarppers.size(); i++) {
            PerformanceRankingWarpper performanceRankingWarpper = performanceRankingWarppers.get(i);
            Double amountOfData = performanceRankingWarpper.getAmountOfData();
            if(amountOfData.compareTo(d) != 0){
                position++;
                d = amountOfData;
            }
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("收入");
        myAchievementWarpper.setTime(time);
        myAchievementWarpper.setRank(position);
        myAchievementWarpper.setAmountOfData(d);
        list.add(myAchievementWarpper);
        //佣金
        performanceRankingWarppers = revenueService.queryDriverRank(2, time, 2);
        position = 0;
        d = 0D;
        for (int i = 0; i < performanceRankingWarppers.size(); i++) {
            PerformanceRankingWarpper performanceRankingWarpper = performanceRankingWarppers.get(i);
            Double amountOfData = performanceRankingWarpper.getAmountOfData();
            if(amountOfData.compareTo(d) != 0){
                position++;
                d = amountOfData;
            }
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("佣金");
        myAchievementWarpper.setTime(time);
        myAchievementWarpper.setRank(position);
        myAchievementWarpper.setAmountOfData(d);
        list.add(myAchievementWarpper);
        return list;
    }
    /**
     * 主动完成线下收款
     */
    @Override
    public void completeCollection() {
        this.baseMapper.completeCollection();
    }
}
Diff truncated after the above file
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderTransferServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RechargeRecordServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RelationServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RevenueServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/RoleServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemBulletinServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemBulletinUserServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemConfigServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/SystemMessageServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/UserServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/UserToCouponServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/WeatherCityServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/YouTuiDriverServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/YouTuiServiceImpl.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/ManagerUser.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/ReqAddManager.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/ReqEditManager.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/transfer/UserDto.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ALiApiUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ALiSendSms.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ChinaMobileUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/DateUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GaoDe/MapConfig.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GaoDe/MapUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GaoDe/model/District.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/GeodesyUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MD5AndKL.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/config/ChannelConfig.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/BindAccount.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/InterfaceRequest.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/InterfaceResponse.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/Register.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/model/UnbindAccount.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/Base64.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/CacheUtils.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/RSAEncryptGeneration.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/RSASignature.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/StringUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/MallBook/util/TrhRequest.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PushUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/RedisUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/ResultUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/TaskUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/UUIDUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/WeChatUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/httpClinet/HttpClientUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/httpClinet/HttpResult.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/huawei/OBSUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/huawei/SMSUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/OCRUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/Realtime.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/WeatherCityInfo.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/juhe/WeatherUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/MongoUtils.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/model/GeoJson.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/model/Location.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/mongodb/model/LocationQuery.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/RongYunUtil.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/model/CloudRecordingCallback.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/model/Config.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/rongyun/model/Output.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/AddOrderWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/BalanceDetailWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/BaseWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommercialWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommissionDetailListWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommissionDetailWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/CommissionListWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DeptWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DictWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverInfo.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverInfoWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverOrderListWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverPositionWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverRegisterWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverYouTuiListWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/DriverYouTuiWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/EditionWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/HallOrderList.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/IntegralIncomeAndExpensesWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/InviteListWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/LogWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/MenuWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/MyAchievementWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/NoticeWrapper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OpenCityWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderEndAddressWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderInfoWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderPositionWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/OrderPriceWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PerformanceRankingWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PerformanceSummaryWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/ProcessOperationsWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PromotionWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/PushOrderInfoWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/ResponseWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/RoleWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/SystemBulletinInfo.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/SystemBulletinListWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/SystemMessageWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/TokenWarpper.java driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/warpper/UserWarpper.java driver/guns-admin/src/main/resources/META-INF/spring-devtools.properties driver/guns-admin/src/main/resources/application.yml driver/guns-admin/src/main/resources/ehcache.xml driver/guns-admin/src/main/resources/logback-spring.xml driver/guns-admin/src/main/resources/redis.properties driver/guns-admin/src/main/webapp/WEB-INF/view/404.html driver/guns-admin/src/main/webapp/WEB-INF/view/blackboard.html driver/guns-admin/src/main/webapp/WEB-INF/view/code/code.html driver/guns-admin/src/main/webapp/WEB-INF/view/common/_container.html driver/guns-admin/src/main/webapp/WEB-INF/view/common/_right.html driver/guns-admin/src/main/webapp/WEB-INF/view/common/_tab.html driver/guns-admin/src/main/webapp/WEB-INF/view/common/_theme.html driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/NameCon.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/SelectCon.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/TimeCon.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/avatar.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/button.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/input.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/select.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/table.tag driver/guns-admin/src/main/webapp/WEB-INF/view/common/tags/tag_tips driver/guns-admin/src/main/webapp/WEB-INF/view/index.html driver/guns-admin/src/main/webapp/WEB-INF/view/login.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/code/code.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/dept/dept.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/dept/dept_add.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/dept/dept_edit.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/dict/dict.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/dict/dict_add.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/dict/dict_edit.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/log/log.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/log/login_log.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/menu/menu.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/menu/menu_add.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/menu/menu_edit.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/notice/notice.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/notice/notice_add.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/notice/notice_edit.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role_add.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role_assign.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/role/role_edit.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_add.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_chpwd.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_edit.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_roleassign.html driver/guns-admin/src/main/webapp/WEB-INF/view/system/user/user_view.html driver/guns-admin/src/main/webapp/static/css/_fstyle.css driver/guns-admin/src/main/webapp/static/css/bootstrap-rtl.css driver/guns-admin/src/main/webapp/static/css/bootstrap.min.css driver/guns-admin/src/main/webapp/static/css/font-awesome.css driver/guns-admin/src/main/webapp/static/css/font-awesome.min.css driver/guns-admin/src/main/webapp/static/css/login.css driver/guns-admin/src/main/webapp/static/css/patterns/header-profile-skin-1.png driver/guns-admin/src/main/webapp/static/css/patterns/header-profile-skin-3.png driver/guns-admin/src/main/webapp/static/css/patterns/header-profile.png driver/guns-admin/src/main/webapp/static/css/patterns/shattered.png driver/guns-admin/src/main/webapp/static/css/plugins/bootstrap-table/bootstrap-table.min.css driver/guns-admin/src/main/webapp/static/css/plugins/bootstrap-treetable/bootstrap-treetable.css driver/guns-admin/src/main/webapp/static/css/plugins/chosen/chosen-sprite.png driver/guns-admin/src/main/webapp/static/css/plugins/chosen/chosen-sprite@2x.png driver/guns-admin/src/main/webapp/static/css/plugins/chosen/chosen.css driver/guns-admin/src/main/webapp/static/css/plugins/iCheck/custom.css driver/guns-admin/src/main/webapp/static/css/plugins/iCheck/green.png driver/guns-admin/src/main/webapp/static/css/plugins/iCheck/green@2x.png driver/guns-admin/src/main/webapp/static/css/plugins/images/sprite-skin-flat.png driver/guns-admin/src/main/webapp/static/css/plugins/validate/bootstrapValidator.min.css driver/guns-admin/src/main/webapp/static/css/plugins/webuploader/webuploader.css driver/guns-admin/src/main/webapp/static/css/plugins/ztree/demo.css driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/1_close.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/1_open.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/2.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/3.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/4.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/5.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/6.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/7.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/8.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/diy/9.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/line_conn.gif driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/loading.gif driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/zTreeStandard.gif driver/guns-admin/src/main/webapp/static/css/plugins/ztree/img/zTreeStandard.png driver/guns-admin/src/main/webapp/static/css/plugins/ztree/zTreeStyle.css driver/guns-admin/src/main/webapp/static/css/style.css driver/guns-admin/src/main/webapp/static/favicon.ico driver/guns-admin/src/main/webapp/static/fonts/FontAwesome.otf driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.eot driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.svg driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.ttf driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.woff driver/guns-admin/src/main/webapp/static/fonts/fontawesome-webfont.woff2 driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.eot driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.svg driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff driver/guns-admin/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff2 driver/guns-admin/src/main/webapp/static/img/bg.png driver/guns-admin/src/main/webapp/static/img/boy.gif driver/guns-admin/src/main/webapp/static/img/girl.gif driver/guns-admin/src/main/webapp/static/img/icons.png driver/guns-admin/src/main/webapp/static/img/loading-upload.gif driver/guns-admin/src/main/webapp/static/img/locked.png driver/guns-admin/src/main/webapp/static/img/user.png driver/guns-admin/src/main/webapp/static/js/bootstrap.min.js driver/guns-admin/src/main/webapp/static/js/common/DateUtils.js driver/guns-admin/src/main/webapp/static/js/common/Feng.js driver/guns-admin/src/main/webapp/static/js/common/ajax-object.js driver/guns-admin/src/main/webapp/static/js/common/bootstrap-table-object.js driver/guns-admin/src/main/webapp/static/js/common/select-list-object.js driver/guns-admin/src/main/webapp/static/js/common/tree-table-object.js driver/guns-admin/src/main/webapp/static/js/common/web-upload-object.js driver/guns-admin/src/main/webapp/static/js/common/ztree-object.js driver/guns-admin/src/main/webapp/static/js/contabs.js driver/guns-admin/src/main/webapp/static/js/content.js driver/guns-admin/src/main/webapp/static/js/hplus.js driver/guns-admin/src/main/webapp/static/js/jquery.min.js driver/guns-admin/src/main/webapp/static/js/jquery.min.map driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/bootstrap-table.min.js driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.js driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js driver/guns-admin/src/main/webapp/static/js/plugins/bootstrap-treetable/bootstrap-treetable.js driver/guns-admin/src/main/webapp/static/js/plugins/chosen/chosen.jquery.js driver/guns-admin/src/main/webapp/static/js/plugins/iCheck/icheck.min.js driver/guns-admin/src/main/webapp/static/js/plugins/laydate/laydate.js driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.eot driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.svg driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.ttf driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/font/iconfont.woff driver/guns-admin/src/main/webapp/static/js/plugins/laydate/theme/default/laydate.css driver/guns-admin/src/main/webapp/static/js/plugins/layer/layer.js driver/guns-admin/src/main/webapp/static/js/plugins/layer/mobile/layer.js driver/guns-admin/src/main/webapp/static/js/plugins/layer/mobile/need/layer.css driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/icon-ext.png driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/icon.png driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/layer.css driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/loading-0.gif driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/loading-1.gif driver/guns-admin/src/main/webapp/static/js/plugins/layer/theme/default/loading-2.gif driver/guns-admin/src/main/webapp/static/js/plugins/metisMenu/jquery.metisMenu.js driver/guns-admin/src/main/webapp/static/js/plugins/pace/pace.min.js driver/guns-admin/src/main/webapp/static/js/plugins/slimscroll/jquery.slimscroll.min.js driver/guns-admin/src/main/webapp/static/js/plugins/validate/additional-methods.min.js driver/guns-admin/src/main/webapp/static/js/plugins/validate/bootstrapValidator.min.js driver/guns-admin/src/main/webapp/static/js/plugins/validate/zh_CN.js driver/guns-admin/src/main/webapp/static/js/plugins/wangEditor/wangEditor.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/Uploader.swf driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.css driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.custom.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.custom.min.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.fis.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.flashonly.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.flashonly.min.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.html5only.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.html5only.min.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.min.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.noimage.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.noimage.min.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.nolog.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.nolog.min.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.withoutimage.js driver/guns-admin/src/main/webapp/static/js/plugins/webuploader/webuploader.withoutimage.min.js driver/guns-admin/src/main/webapp/static/js/plugins/ztree/jquery.ztree.all.min.js driver/guns-admin/src/main/webapp/static/modular/code/gen.js driver/guns-admin/src/main/webapp/static/modular/flowable/expense/expense.js driver/guns-admin/src/main/webapp/static/modular/flowable/expense/expense_info.js driver/guns-admin/src/main/webapp/static/modular/flowable/process/process.js driver/guns-admin/src/main/webapp/static/modular/flowable/process/process_info.js driver/guns-admin/src/main/webapp/static/modular/system/code/code.js driver/guns-admin/src/main/webapp/static/modular/system/dept/dept.js driver/guns-admin/src/main/webapp/static/modular/system/dept/dept_info.js driver/guns-admin/src/main/webapp/static/modular/system/dict/dict.js driver/guns-admin/src/main/webapp/static/modular/system/dict/dict_info.js driver/guns-admin/src/main/webapp/static/modular/system/log/log.js driver/guns-admin/src/main/webapp/static/modular/system/log/login_log.js driver/guns-admin/src/main/webapp/static/modular/system/menu/menu.js driver/guns-admin/src/main/webapp/static/modular/system/menu/menu_info.js driver/guns-admin/src/main/webapp/static/modular/system/notice/notice.js driver/guns-admin/src/main/webapp/static/modular/system/notice/notice_info.js driver/guns-admin/src/main/webapp/static/modular/system/role/role.js driver/guns-admin/src/main/webapp/static/modular/system/role/role_info.js driver/guns-admin/src/main/webapp/static/modular/system/user/user.js driver/guns-admin/src/main/webapp/static/modular/system/user/user_info.js driver/guns-admin/src/test/java/com/agentdriving/driver/GunsApplicationTest.java driver/guns-core/pom.xml driver/guns-core/src/main/java/com/agentdriving/driver/core/CoreFlag.java driver/guns-core/src/main/java/com/agentdriving/driver/core/aop/BaseControllerExceptionHandler.java driver/guns-core/src/main/java/com/agentdriving/driver/core/base/controller/BaseController.java driver/guns-core/src/main/java/com/agentdriving/driver/core/base/controller/GlobalController.java driver/guns-core/src/main/java/com/agentdriving/driver/core/base/controller/GunsErrorView.java driver/guns-core/src/main/java/com/agentdriving/driver/core/base/tips/ErrorTip.java driver/guns-core/src/main/java/com/agentdriving/driver/core/base/tips/SuccessTip.java driver/guns-core/src/main/java/com/agentdriving/driver/core/base/tips/Tip.java driver/guns-core/src/main/java/com/agentdriving/driver/core/base/warpper/BaseControllerWarpper.java driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/BaseCacheFactory.java driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/CacheKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/EhcacheFactory.java driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/ICache.java driver/guns-core/src/main/java/com/agentdriving/driver/core/cache/ILoader.java driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultFastjsonConfig.java driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultMultiConfig.java driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultProperties.java driver/guns-core/src/main/java/com/agentdriving/driver/core/config/DefaultWebConfig.java driver/guns-core/src/main/java/com/agentdriving/driver/core/config/properties/DruidProperties.java driver/guns-core/src/main/java/com/agentdriving/driver/core/config/properties/MutiDataSourceProperties.java driver/guns-core/src/main/java/com/agentdriving/driver/core/constant/IsMenu.java driver/guns-core/src/main/java/com/agentdriving/driver/core/datascope/DataScope.java driver/guns-core/src/main/java/com/agentdriving/driver/core/datascope/DataScopeInterceptor.java driver/guns-core/src/main/java/com/agentdriving/driver/core/db/Db.java driver/guns-core/src/main/java/com/agentdriving/driver/core/exception/GunsException.java driver/guns-core/src/main/java/com/agentdriving/driver/core/exception/GunsExceptionEnum.java driver/guns-core/src/main/java/com/agentdriving/driver/core/exception/ServiceExceptionEnum.java driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/DataSourceContextHolder.java driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/DynamicDataSource.java driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/annotion/DataSource.java driver/guns-core/src/main/java/com/agentdriving/driver/core/mutidatasource/aop/MultiSourceExAop.java driver/guns-core/src/main/java/com/agentdriving/driver/core/node/MenuNode.java driver/guns-core/src/main/java/com/agentdriving/driver/core/node/ZTreeNode.java driver/guns-core/src/main/java/com/agentdriving/driver/core/page/PageBT.java driver/guns-core/src/main/java/com/agentdriving/driver/core/page/PageInfoBT.java driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/ImgQrTool.java driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/MatrixToImageConfig.java driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/MatrixToImageWriter.java driver/guns-core/src/main/java/com/agentdriving/driver/core/qr/QrImage.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/BasicType.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/BeanKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/ClassKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/CollectionKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/DateTime.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/DateTimeKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/HexKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/HttpKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/ObjectKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/PageKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/StrKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/WafKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/WafRequestWrapper.java driver/guns-core/src/main/java/com/agentdriving/driver/core/support/exception/ToolBoxException.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/Convert.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/DateUtil.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/FileUtil.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/HttpSessionHolder.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/IdGenerator.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/MD5Util.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/NumUtil.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/PingYinUtil.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/RenderUtil.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/ResKit.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/SimpleContrast.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/SpringContextHolder.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/SqlUtil.java driver/guns-core/src/main/java/com/agentdriving/driver/core/util/ToolUtil.java driver/guns-core/src/main/java/com/agentdriving/driver/core/xss/XssFilter.java driver/guns-core/src/main/java/com/agentdriving/driver/core/xss/XssHttpServletRequestWrapper.java driver/guns-core/src/main/resources/META-INF/spring.factories driver/guns-core/src/main/resources/default-config.properties driver/guns-generator/pom.xml driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/GunsCodeGenerator.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/config/AbstractGeneratorConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/config/GunsGeneratorConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/config/WebGeneratorConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/action/model/GenQo.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/SimpleTemplateEngine.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/base/AbstractTemplateEngine.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/base/GunsTemplateEngine.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/ContextConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/ControllerConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/DaoConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/Menu.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/PageConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/ServiceConfig.java driver/guns-generator/src/main/java/com/agentdriving/driver/generator/engine/config/SqlConfig.java driver/guns-generator/src/main/resources/gunsTemplate/advanced/Controller.java.btl driver/guns-generator/src/main/resources/gunsTemplate/advanced/menu_sql.sql.btl driver/guns-generator/src/main/resources/gunsTemplate/advanced/page.html.btl driver/guns-generator/src/main/resources/gunsTemplate/advanced/page.js.btl driver/guns-generator/src/main/resources/gunsTemplate/advanced/page_add.html.btl driver/guns-generator/src/main/resources/gunsTemplate/advanced/page_edit.html.btl driver/guns-generator/src/main/resources/gunsTemplate/advanced/page_info.js.btl driver/pom.xml