From 403fbe8fa8d3df96d692ad41ffa1c300b0db5493 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期六, 24 八月 2024 18:02:02 +0800 Subject: [PATCH] APP端登录模块接口 --- xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/Constants.java | 4 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/vo/ContentSettingVO.java | 23 xinquan-auth/src/main/java/com/xinquan/auth/util/HuaWeiSMSUtil.java | 189 +++ xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java | 247 ++++ xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VersionServiceImpl.java | 20 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java | 44 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserEnergyRecordController.java | 3 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserTree.java | 10 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/inner/InnerAppUserController.java | 62 + xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/TreeLevelEnum.java | 32 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserController.java | 3 xinquan-auth/src/main/java/com/xinquan/auth/form/AppRegisterBody.java | 13 xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/LoginUser.java | 16 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusic.java | 10 xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/service/TokenService.java | 45 xinquan-auth/src/main/java/com/xinquan/auth/form/VerifyResultVO.java | 23 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/HotWordsService.java | 16 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserCourseController.java | 3 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CommonQuestionService.java | 16 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicUserMapper.java | 16 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CustomConfigService.java | 16 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/UserLevelSettingServiceImpl.java | 20 xinquan-api/xinquan-api-user/pom.xml | 7 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/ContentSettingService.java | 16 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ListingStatusEnum.java | 39 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/impl/HomeBackgroundMusicUserServiceImpl.java | 20 xinquan-modules/xinquan-system/pom.xml | 5 xinquan-auth/src/main/java/com/xinquan/auth/form/AppLoginBody.java | 34 pom.xml | 5 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserBankController.java | 3 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserQuestion.java | 41 xinquan-modules/pom.xml | 5 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/HomeBackgroundMusicUserService.java | 16 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AppUserStatusEnum.java | 24 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/UserLevelSettingService.java | 16 xinquan-modules/xinquan-user/pom.xml | 12 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VipSettingServiceImpl.java | 20 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/BannerServiceImpl.java | 20 xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppWXLoginBody.java | 49 + xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/TreeLevelSetting.java | 10 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/TreeLevelSettingServiceImpl.java | 20 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/DisabledEnum.java | 8 xinquan-modules/xinquan-meditation/pom.xml | 12 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/ServiceNameConstants.java | 14 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserQuestionService.java | 16 xinquan-modules/xinquan-order/pom.xml | 12 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/mapper/AppUserQuestionMapper.java | 16 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/UserLevelSetting.java | 12 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserMeditationController.java | 3 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/config/MybatisPlusConfig.java | 58 + xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/utils/ObsUploadUtil.java | 77 + xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWalletRecordController.java | 3 xinquan-api/xinquan-api-course/src/main/java/com/xinquan/course/api/feign/RemoteCourseService.java | 2 xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicMapper.xml | 4 xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java | 26 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusicUser.java | 42 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/ContentSettingServiceImpl.java | 20 xinquan-modules/xinquan-file/pom.xml | 13 xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/OrderPaymentRecordService.java | 2 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ConfigEnum.java | 63 + xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppVerifyCellPhoneBody.java | 28 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtTagController.java | 27 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/PublicService.java | 34 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CommonQuestionServiceImpl.java | 20 xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/annotation/EnableCustomConfig.java | 4 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/SecurityConstants.java | 5 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/TreeLevelSettingService.java | 16 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java | 302 ++++++ xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTagController.java | 3 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeRedemptionRecordController.java | 3 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeController.java | 3 xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserQuestionMapper.xml | 11 xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java | 57 + code-generator/pom.xml | 52 + xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/web/domain/BaseModel.java | 13 xinquan-modules/xinquan-system/src/main/resources/mapper/system/UserLevelSettingMapper.xml | 2 xinquan-modules/xinquan-gen/pom.xml | 19 xinquan-auth/src/main/java/com/xinquan/auth/form/AppChangePwdBody.java | 29 xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicUserMapper.xml | 18 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicController.java | 3 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWithdrawController.java | 3 xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserTreeMapper.xml | 2 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserQuestionController.java | 20 xinquan-modules/xinquan-system/src/main/resources/mapper/system/TreeLevelSettingMapper.xml | 1 xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/JacksonConfig.java | 48 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CustomConfigServiceImpl.java | 20 xinquan-modules/xinquan-course/pom.xml | 12 xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/CacheConstants.java | 23 xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppleLoginUser.java | 18 xinquan-gateway/src/main/java/com/xinquan/gateway/config/SwaggerProvider.java | 4 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VersionService.java | 16 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicMapper.java | 4 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VipSettingService.java | 16 xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/handler/MyMetaObjectHandler.java | 44 xinquan-common/xinquan-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 2 xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/controller/SysFileController.java | 28 xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicUserController.java | 20 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/client/PublicController.java | 38 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserQuestionServiceImpl.java | 20 xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/SysUser.java | 3 xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/feignClient/SysUserClient.java | 9 /dev/null | 76 - xinquan-api/xinquan-api-course/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 1 xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java | 120 ++ xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppCaptchaBody.java | 26 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/BannerService.java | 16 xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/HotWordsServiceImpl.java | 20 xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTreeController.java | 3 xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/factory/SysUserFallbackFactory.java | 9 xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/WXLoginUser.java | 68 + xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/Tag.java | 1 111 files changed, 2,626 insertions(+), 310 deletions(-) diff --git a/code-generator/pom.xml b/code-generator/pom.xml new file mode 100644 index 0000000..21c6175 --- /dev/null +++ b/code-generator/pom.xml @@ -0,0 +1,52 @@ +<?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.xinquan</groupId> + <artifactId>xinquan</artifactId> + <version>3.6.2</version> + </parent> + + <artifactId>code-generator</artifactId> + + <properties> + <maven.compiler.source>8</maven.compiler.source> + <maven.compiler.target>8</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + <dependencies> + <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core --> + <dependency> + <groupId>org.apache.velocity</groupId> + <artifactId>velocity-engine-core</artifactId> + <version>2.3</version> + </dependency> + + <!-- Mysql Connector --> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13.2</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-generator</artifactId> + <version>3.4.0</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.xinquan</groupId> + <artifactId>xinquan-common-core</artifactId> + </dependency> + </dependencies> +</project> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 53fada4..ce34c0f 100644 --- a/pom.xml +++ b/pom.xml @@ -238,10 +238,7 @@ <module>xinquan-modules</module> <module>xinquan-api</module> <module>xinquan-common</module> - <module>xinquan-modules/xinquan-user</module> - <module>xinquan-modules/xinquan-course</module> - <module>xinquan-modules/xinquan-meditation</module> - <module>xinquan-modules/xinquan-order</module> + <module>code-generator</module> </modules> <packaging>pom</packaging> diff --git a/xinquan-api/xinquan-api-course/src/main/java/com/xinquan/course/api/feign/RemoteCourseService.java b/xinquan-api/xinquan-api-course/src/main/java/com/xinquan/course/api/feign/RemoteCourseService.java index 247ffd1..5fcac4a 100644 --- a/xinquan-api/xinquan-api-course/src/main/java/com/xinquan/course/api/feign/RemoteCourseService.java +++ b/xinquan-api/xinquan-api-course/src/main/java/com/xinquan/course/api/feign/RemoteCourseService.java @@ -8,7 +8,7 @@ * @author mitao * @date 2024/8/21 */ -@FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.COURSE, fallbackFactory = RemoteCourseFallbackFactory.class) +@FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.COURSE_SERVICE, fallbackFactory = RemoteCourseFallbackFactory.class) public interface RemoteCourseService { } diff --git a/xinquan-api/xinquan-api-course/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/xinquan-api/xinquan-api-course/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 2e77edb..e69de29 100644 --- a/xinquan-api/xinquan-api-course/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/xinquan-api/xinquan-api-course/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +0,0 @@ -com.xinquan.course.api.factory.RemoteCourseFallbackFactory \ No newline at end of file diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/DataUpdateHandlerConfig.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/DataUpdateHandlerConfig.java deleted file mode 100644 index 63a80da..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/DataUpdateHandlerConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.xinquan.system.api.config; - -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import com.xinquan.system.api.model.LoginUser; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.reflection.MetaObject; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.StringUtils; - -import java.util.Date; - -/** - * @author xiaochen - * @ClassName DataUpdateInterceptor - * @Description 数据更新操作处理 - * @date 2021-12-15 - * <p> - * 注意,之前在此处注入了 JwtTokenUtils - * <p> - * 造成spring循环依赖,项目支棱不起来 - */ -@Slf4j -@Configuration -public class DataUpdateHandlerConfig implements MetaObjectHandler { - - @Override - public void insertFill(MetaObject metaObject) { - - } - - @Override - public void updateFill(MetaObject metaObject) { - - } -} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/HttpConfig.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/HttpConfig.java deleted file mode 100644 index b33ed30..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/HttpConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.xinquan.system.api.config; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.client.RestTemplate; - -/** - * http请求工具配置 - * - * @author: KingKong - * @create: 2018-11-14 10:47 - **/ -@Configuration -public class HttpConfig { - - @Autowired - private RestTemplateBuilder builder; - - @Bean - public RestTemplate restTemplate() { - return builder.build(); - } -} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/MybatisPlusConfig.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/MybatisPlusConfig.java deleted file mode 100644 index 5b7c44a..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/config/MybatisPlusConfig.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.xinquan.system.api.config; - -import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.core.config.GlobalConfig; -import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author xiaochen - * @ClassName MybatisPlusConfig - * @Description MybatisPlus相关配置 - * @date 2020-09-22 11:22、 - * 直接以实现类作为bean的注入(有事务管理的类) - * @EnableTransactionManagement(proxyTargetClass = true) - */ -@Configuration -public class MybatisPlusConfig { - private final DataUpdateHandlerConfig dataUpdateHandler; - - @Autowired - public MybatisPlusConfig(DataUpdateHandlerConfig dataUpdateHandler) { - this.dataUpdateHandler = dataUpdateHandler; - } - - /** - * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题 - */ - @Bean - public MybatisPlusInterceptor mybatisPlusInterceptor() { - MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); - return interceptor; - } - - /** - * 自动填充功能 - * - * @return - */ - @Bean - public GlobalConfig globalConfig() { - GlobalConfig globalConfig = new GlobalConfig(); - globalConfig.setMetaObjectHandler(dataUpdateHandler); - return globalConfig; - } - - -} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/SysUser.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/SysUser.java index 3faf056..d39f786 100644 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/SysUser.java +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/SysUser.java @@ -1,6 +1,7 @@ package com.xinquan.system.api.domain; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.xinquan.common.core.annotation.Excel; import com.xinquan.common.core.annotation.Excel.ColumnType; import com.xinquan.common.core.annotation.Excel.Type; @@ -28,7 +29,7 @@ /** 用户ID */ @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") - @TableField("user_id") + @TableId("user_id") private Long userId; /** 部门ID */ diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/factory/SysUserFallbackFactory.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/factory/SysUserFallbackFactory.java index d7a2790..e725bf7 100644 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/factory/SysUserFallbackFactory.java +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/factory/SysUserFallbackFactory.java @@ -4,11 +4,9 @@ import com.xinquan.system.api.domain.SysRole; import com.xinquan.system.api.domain.SysUser; import com.xinquan.system.api.feignClient.SysUserClient; -import com.xinquan.system.api.model.*; +import java.util.List; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; - -import java.util.List; @Component public class SysUserFallbackFactory implements FallbackFactory<SysUserClient> { @Override @@ -48,11 +46,6 @@ @Override public R<List<SysUser>> queryUserByPhoneList(List<String> phoneList) { return R.fail("通过手机号集合查询用户失败:" + cause.getMessage()); - } - - @Override - public R<Boolean> addUserRole(List<SysUserRoleDTO> dtoList) { - return R.fail("默认批量添加修理厂失败:" + cause.getMessage()); } @Override diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/feignClient/SysUserClient.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/feignClient/SysUserClient.java index 91488ed..b0c0698 100644 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/feignClient/SysUserClient.java +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/feignClient/SysUserClient.java @@ -5,7 +5,6 @@ import com.xinquan.system.api.domain.SysRole; import com.xinquan.system.api.domain.SysUser; import com.xinquan.system.api.factory.SysUserFallbackFactory; -import com.xinquan.system.api.model.SysUserRoleDTO; import java.util.List; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -52,14 +51,6 @@ */ @PostMapping("/user/queryUserByPhoneList") R<List<SysUser>> queryUserByPhoneList(@RequestBody List<String> phoneList); - - /** - * 默认批量添加修理厂 - * @param dtoList - * @return - */ - @PostMapping("/user/addUserRole") - R<Boolean> addUserRole(@RequestBody List<SysUserRoleDTO> dtoList); /** * 通过手机号查询用户 diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppCaptchaBody.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppCaptchaBody.java new file mode 100644 index 0000000..ebc36f7 --- /dev/null +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppCaptchaBody.java @@ -0,0 +1,26 @@ +package com.xinquan.system.api.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +/** + * @author mitao + * @date 2024/8/22 + */ +@Data +@ApiModel(value = "APP端验证码对象", description = "APP端验证码对象") +public class AppCaptchaBody implements Serializable { + + private static final long serialVersionUID = 6079425494597881288L; + + @ApiModelProperty(value = "手机号") + @NotBlank(message = "手机号不能为空") + private String cellPhone; + + @ApiModelProperty("验证码") + @NotBlank(message = "验证码不能为空") + private String captcha; +} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppVerifyCellPhoneBody.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppVerifyCellPhoneBody.java new file mode 100644 index 0000000..61a9254 --- /dev/null +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppVerifyCellPhoneBody.java @@ -0,0 +1,28 @@ +package com.xinquan.system.api.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author mitao + * @date 2024/8/23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "APP端验证手机号对象", description = "APP端验证手机号对象") +public class AppVerifyCellPhoneBody extends AppCaptchaBody { + + private static final long serialVersionUID = -6119279151800382508L; + @NotBlank(message = "微信openid或苹果appleId不能为空") + @ApiModelProperty(value = "微信openid或苹果appleId") + private String wxOrAppleId; + + @NotNull(message = "登录类型不能为空") + @ApiModelProperty(value = "登录类型 1=微信 2=苹果") + private Integer loginType; + +} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppWXLoginBody.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppWXLoginBody.java new file mode 100644 index 0000000..75a7315 --- /dev/null +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppWXLoginBody.java @@ -0,0 +1,49 @@ +package com.xinquan.system.api.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +/** + * 用户登录对象 + * + * @author ruoyi + */ +@Data +@ApiModel("APP用户微信登录对象") +public class AppWXLoginBody implements Serializable { + + private static final long serialVersionUID = 2440885532660952359L; + + /** + * 微信openId + */ + @ApiModelProperty(value = "微信openId") + @NotBlank(message = "微信openId不能为空") + private String wxOpenId; + + /** + * 用户昵称 + */ + @ApiModelProperty(value = "用户昵称") + @NotBlank(message = "用户昵称不能为空") + private String nickname; + + /** + * 用户头像 + */ + @ApiModelProperty(value = "用户头像") + @NotBlank(message = "用户头像不能为空") + private String headImgUrl; + + /** + * 用户头像 + */ + @ApiModelProperty(value = "用户性别") + @NotNull(message = "用户性别不能为空") + private Integer sex; + +} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppleLoginUser.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppleLoginUser.java new file mode 100644 index 0000000..17d18c9 --- /dev/null +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppleLoginUser.java @@ -0,0 +1,18 @@ +package com.xinquan.system.api.model; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户信息 + * + * @author ruoyi + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "苹果登录用户信息") +public class AppleLoginUser extends WXLoginUser { + + private static final long serialVersionUID = 6891070491318038281L; +} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanyAddSysUserDto.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanyAddSysUserDto.java deleted file mode 100644 index f5886e6..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanyAddSysUserDto.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.xinquan.system.api.model; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -public class CompanyAddSysUserDto { - List<CompanyUserListVo> list; - @ApiModelProperty("公司id") - private Integer companyId; -} \ No newline at end of file diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanySysUserReq.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanySysUserReq.java deleted file mode 100644 index 6813344..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanySysUserReq.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xinquan.system.api.model; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class CompanySysUserReq { - private Integer companyId; - private String name; - private List<Integer> userIds; - -} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanyUserListVo.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanyUserListVo.java deleted file mode 100644 index 04e56aa..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/CompanyUserListVo.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xinquan.system.api.model; - -import lombok.Data; - -@Data -public class CompanyUserListVo { - private Long id; - - private String userName; - - private String phoneNumber; - - private String password; - - private String nickName; -} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/LoginUser.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/LoginUser.java index 1b4d64b..649c8ff 100644 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/LoginUser.java +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/LoginUser.java @@ -1,14 +1,17 @@ package com.xinquan.system.api.model; +import com.xinquan.system.api.domain.SysUser; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.util.Set; -import com.xinquan.system.api.domain.SysUser; /** * 用户信息 * * @author ruoyi */ +@ApiModel(value = "登录用户信息") public class LoginUser implements Serializable { private static final long serialVersionUID = 1L; @@ -16,46 +19,55 @@ /** * 用户唯一标识 */ + @ApiModelProperty(value = "用户唯一标识") private String token; /** - * 用户名id + * 用户id */ + @ApiModelProperty(value = "用户id") private Long userid; /** * 用户名 */ + @ApiModelProperty(value = "用户名") private String username; /** * 登录时间 */ + @ApiModelProperty(value = "登录时间") private Long loginTime; /** * 过期时间 */ + @ApiModelProperty(value = "过期时间") private Long expireTime; /** * 登录IP地址 */ + @ApiModelProperty(value = "登录IP地址") private String ipaddr; /** * 权限列表 */ + @ApiModelProperty(value = "权限列表") private Set<String> permissions; /** * 角色列表 */ + @ApiModelProperty(value = "角色列表") private Set<String> roles; /** * 用户信息 */ + @ApiModelProperty(value = "用户信息") private SysUser sysUser; public String getToken() diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/SysUserRoleDTO.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/SysUserRoleDTO.java deleted file mode 100644 index 894451a..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/SysUserRoleDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xinquan.system.api.model; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -@Data -@ApiModel(value = "自动关联修理厂角色DTO") -public class SysUserRoleDTO implements Serializable { - - @ApiModelProperty(value = "用户id") - private Long userId; - @ApiModelProperty(value = "角色id") - private Long roleId; - -} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/TRepairShopAdd.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/TRepairShopAdd.java deleted file mode 100644 index 58c3d14..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/TRepairShopAdd.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.xinquan.system.api.model; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -@Data -public class TRepairShopAdd { - @ApiModelProperty("账号") - @NotBlank(message = "账号不能为空") - private String phonenumber; - @ApiModelProperty("密码") - @NotBlank(message = "密码不能为空") - private String pwd; - -} \ No newline at end of file diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/TRepairShopAddDto.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/TRepairShopAddDto.java deleted file mode 100644 index 90587ae..0000000 --- a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/TRepairShopAddDto.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xinquan.system.api.model; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; -@Data -public class TRepairShopAddDto { - private List<TRepairShopAdd> list; - @ApiModelProperty("修理场id") - @NotNull(message = "修理厂id不能为空") - private Integer repairId; -} diff --git a/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/WXLoginUser.java b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/WXLoginUser.java new file mode 100644 index 0000000..13bfe0b --- /dev/null +++ b/xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/WXLoginUser.java @@ -0,0 +1,68 @@ +package com.xinquan.system.api.model; + +import com.xinquan.system.api.domain.SysUser; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * 用户信息 + * + * @author ruoyi + */ +@Data +@ApiModel(value = "微信登录用户信息") +public class WXLoginUser implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户唯一标识 + */ + @ApiModelProperty(value = "APP用户id") + private Long token; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id") + private Long userid; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名") + private String username; + + /** + * 登录时间 + */ + @ApiModelProperty(value = "登录时间") + private Long loginTime; + + /** + * 过期时间 + */ + @ApiModelProperty(value = "过期时间") + private Long expireTime; + + /** + * 登录IP地址 + */ + @ApiModelProperty(value = "登录IP地址") + private String ipaddr; + + @ApiModelProperty(value = "绑定手机号状态 1=是 2=否") + private Integer bindStatus = 2; + + @ApiModelProperty(value = "用户手机") + private String cellPhone; + + /** + * 系统用户信息 + */ + @ApiModelProperty(value = "系统用户信息") + private SysUser sysUser; + +} diff --git a/xinquan-api/xinquan-api-user/pom.xml b/xinquan-api/xinquan-api-user/pom.xml index 3a4e2fd..98cab4e 100644 --- a/xinquan-api/xinquan-api-user/pom.xml +++ b/xinquan-api/xinquan-api-user/pom.xml @@ -27,5 +27,12 @@ </exclusion> </exclusions> </dependency> + + <!--system feign模块--> + <dependency> + <groupId>com.xinquan</groupId> + <artifactId>xinquan-api-system</artifactId> + <scope>compile</scope> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java b/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java index 2a87c9f..f821cf1 100644 --- a/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java +++ b/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java @@ -1,6 +1,12 @@ package com.xinquan.user.api.factory; import com.xinquan.common.core.domain.R; +import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppVerifyCellPhoneBody; +import com.xinquan.system.api.model.AppWXLoginBody; +import com.xinquan.system.api.model.AppleLoginUser; +import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; import com.xinquan.user.api.feign.RemoteAppUserService; @@ -28,6 +34,26 @@ public R<Boolean> registerAppUser(AppUserDTO appUserDTO, String source) { return R.fail("APP用户注册失败。"); } + + @Override + public R<WXLoginUser> wxLogin(AppWXLoginBody body, String inner) { + return R.fail("APP用户微信登录失败。"); + } + + @Override + public R<AppleLoginUser> appleLogin(String appleId, String source) { + return R.fail("APP用户苹果登录失败。"); + } + + @Override + public R<LoginUser> appCaptchaLogin(AppCaptchaBody body, String source) { + return R.fail("APP用户验证码登录失败。"); + } + + @Override + public R<WXLoginUser> verifyCellPhone(AppVerifyCellPhoneBody body, String source) { + return R.fail("APP用户微信苹果登录验证手机号失败。"); + } }; } } diff --git a/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java b/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java index 0735297..81c9882 100644 --- a/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java +++ b/xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java @@ -3,6 +3,12 @@ import com.xinquan.common.core.constant.SecurityConstants; import com.xinquan.common.core.constant.ServiceNameConstants; import com.xinquan.common.core.domain.R; +import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppVerifyCellPhoneBody; +import com.xinquan.system.api.model.AppWXLoginBody; +import com.xinquan.system.api.model.AppleLoginUser; +import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; import com.xinquan.user.api.factory.RemoteAppUserFallbackFactory; @@ -10,16 +16,17 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; /** * @author mitao * @date 2024/8/21 */ -@FeignClient(contextId = "remoteAppUserService", value = ServiceNameConstants.APP_USER, fallbackFactory = RemoteAppUserFallbackFactory.class) +@FeignClient(contextId = "remoteAppUserService", value = ServiceNameConstants.APP_USER_SERVICE, fallbackFactory = RemoteAppUserFallbackFactory.class) public interface RemoteAppUserService { /** - * 获取用户信息 + * 获取未注销的用户信息 * * @param dto * @param source @@ -30,7 +37,7 @@ @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** - * app用户注册 + * APP用户注册 * * @param appUserDTO * @param source @@ -39,4 +46,48 @@ @PostMapping("/inner/app-user/registerAppUser") R<Boolean> registerAppUser(@RequestBody AppUserDTO appUserDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * APP微信登录 + * + * @param body + * @param source + * @return + */ + @PostMapping("/inner/app-user/wxLogin") + R<WXLoginUser> wxLogin(@RequestBody AppWXLoginBody body, + @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * APP苹果登录 + * + * @param appleId + * @param source + * @return + */ + @PostMapping("/inner/app-user/appleLogin") + R<AppleLoginUser> appleLogin(@RequestParam("appleId") String appleId, + @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 验证码登录 + * + * @param body + * @param source + * @return + */ + @PostMapping("/inner/app-user/captchaLogin") + R<LoginUser> appCaptchaLogin(@RequestBody AppCaptchaBody body, + @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 微信苹果登录验证手机号码操作 + * + * @param body + * @param source + * @return + */ + @PostMapping("/inner/app-user/verifyCellPhone") + R<WXLoginUser> verifyCellPhone(@RequestBody AppVerifyCellPhoneBody body, + @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java b/xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java index 47e877a..41f1707 100644 --- a/xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java +++ b/xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java @@ -1,8 +1,11 @@ package com.xinquan.auth.controller; +import com.xinquan.auth.form.AppChangePwdBody; +import com.xinquan.auth.form.AppLoginBody; import com.xinquan.auth.form.AppRegisterBody; import com.xinquan.auth.form.LoginBody; import com.xinquan.auth.form.RegisterBody; +import com.xinquan.auth.form.VerifyResultVO; import com.xinquan.auth.service.SysLoginService; import com.xinquan.common.core.domain.R; import com.xinquan.common.core.utils.JwtUtils; @@ -13,7 +16,12 @@ import com.xinquan.system.api.domain.SysRole; import com.xinquan.system.api.domain.SysUser; import com.xinquan.system.api.feignClient.SysUserClient; +import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppVerifyCellPhoneBody; +import com.xinquan.system.api.model.AppWXLoginBody; +import com.xinquan.system.api.model.AppleLoginUser; import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; @@ -23,6 +31,7 @@ import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -52,11 +61,15 @@ * @param cellPhone 手机号码 * @return */ - @GetMapping("/app/send-captcha-code") + @GetMapping("/app/sendCaptchaCode") @ApiOperation(value = "发送验证码",tags = {"APP端"}) - @ApiImplicitParams({@ApiImplicitParam(name = "cellPhone",value = "手机号码",required = true,dataType = "String",paramType = "query")}) - public R<?> sendCaptchaCode(@RequestParam("cellPhone") String cellPhone) { - sysLoginService.sendCaptchaCode(cellPhone); + @ApiImplicitParams({ + @ApiImplicitParam(name = "cellPhone", value = "手机号码", required = true, dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "type", value = "类型 1=注册 2=验证码登录 3=找回密码 4=第三方登录后验证手机", required = true, dataType = "Integer", paramType = "query")}) + public R<?> sendCaptchaCode( + @RequestParam(value = "cellPhone", required = true) String cellPhone, + @RequestParam("type") Integer type) { + sysLoginService.sendCaptchaCode(cellPhone, type); return R.ok(); } @@ -67,13 +80,110 @@ */ @ApiOperation(value = "注册账户",tags = {"APP端"}) @PostMapping("/app/register") - public R<?> appRegister(@RequestBody AppRegisterBody appRegisterBody) + public R<?> appRegister(@Validated @RequestBody AppRegisterBody appRegisterBody) { // 用户注册 sysLoginService.appRegister(appRegisterBody); return R.ok(); } + /** + * 账号密码登录 + * + * @param body + * @return + */ + @ApiOperation(value = "账号密码登录", tags = {"APP端"}) + @PostMapping("/app/login") + public R<?> appLogin(@Validated @RequestBody AppLoginBody body) { + LoginUser userInfo = sysLoginService.appLogin(body); + return R.ok(tokenService.createToken(userInfo)); + } + + /** + * 验证码登录 + * + * @param body + * @return + */ + @ApiOperation(value = "验证码登录", tags = {"APP端"}) + @PostMapping("/app/captchaLogin") + public R<?> appCaptchaLogin(@Validated @RequestBody AppCaptchaBody body) { + LoginUser userInfo = sysLoginService.appCaptchaLogin(body); + return R.ok(tokenService.createToken(userInfo)); + } + + /** + * 验证手机号 + * + * @param body + * @return + */ + @ApiOperation(value = "忘记密码-验证手机号", tags = {"APP端"}) + @PostMapping("/app/verifyPhone") + public R<VerifyResultVO> verifyPhone(@Validated @RequestBody AppCaptchaBody body) { + return R.ok(sysLoginService.verifyPhone(body)); + } + + /** + * 设置新密码 + * + * @param body + * @return + */ + @ApiOperation(value = "设置新密码", tags = {"APP端"}) + @PostMapping("/app/changePassword") + public R<?> changePassword(@Validated @RequestBody AppChangePwdBody body) { + sysLoginService.changePassword(body); + return R.ok(); + } + + /** + * APP微信登录 + * + * @param body + * @return + */ + @ApiOperation(value = "微信登录", tags = {"APP端"}) + @PostMapping("/app/wxLogin") + public R<?> thirdLogin(@Validated @RequestBody AppWXLoginBody body) { + WXLoginUser wxLoginUser = sysLoginService.wxLogin(body); + return R.ok(tokenService.createToken4WXLoginUser(wxLoginUser)); + } + + /** + * 苹果登录 + * + * @param appleId + * @return + */ + @ApiOperation(value = "苹果登录", tags = {"APP端"}) + @PostMapping("/app/appleLogin") + @ApiImplicitParams({ + @ApiImplicitParam(name = "appleId", value = "苹果ID", required = true, dataType = "String", paramType = "query")}) + public R<?> appleLogin(@RequestParam(value = "appleId", required = true) String appleId) { + AppleLoginUser appleLoginUser = sysLoginService.appleLogin(appleId); + return R.ok(tokenService.createToken4WXLoginUser(appleLoginUser)); + } + + /** + * 微信苹果登录-验证手机号 + * + * @param body + * @return + */ + @ApiOperation(value = "微信苹果登录-验证手机号", tags = {"APP端"}) + @PostMapping("/app/verifyCellPhone") + public R<?> verifyCellPhone(@Validated @RequestBody AppVerifyCellPhoneBody body) { + return R.ok(tokenService.createToken4WXLoginUser(sysLoginService.verifyCellPhone(body))); + } + + /** + * 管理后台登录 + * + * @param form + * @return + */ @ApiOperation(value = "管理后台登录",tags = {"管理后台"}) @PostMapping("login") public R<?> login(@RequestBody LoginBody form) diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/form/AppChangePwdBody.java b/xinquan-auth/src/main/java/com/xinquan/auth/form/AppChangePwdBody.java new file mode 100644 index 0000000..db9023c --- /dev/null +++ b/xinquan-auth/src/main/java/com/xinquan/auth/form/AppChangePwdBody.java @@ -0,0 +1,29 @@ +package com.xinquan.auth.form; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户登录对象 + * + * @author ruoyi + */ +@Data +@ApiModel("APP用户修改密码对象") +@EqualsAndHashCode(callSuper = true) +public class AppChangePwdBody extends AppLoginBody implements Serializable { + + private static final long serialVersionUID = 2440885532660952359L; + + /** + * 用户密码 + */ + @ApiModelProperty(value = "密码修改秘钥") + @NotBlank(message = "密码修改秘钥不能为空") + private String secret; + +} diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/form/AppLoginBody.java b/xinquan-auth/src/main/java/com/xinquan/auth/form/AppLoginBody.java new file mode 100644 index 0000000..00767d2 --- /dev/null +++ b/xinquan-auth/src/main/java/com/xinquan/auth/form/AppLoginBody.java @@ -0,0 +1,34 @@ +package com.xinquan.auth.form; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +/** + * 用户登录对象 + * + * @author ruoyi + */ +@Data +@ApiModel("APP用户登录对象") +public class AppLoginBody implements Serializable { + + private static final long serialVersionUID = 2440885532660952359L; + + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号") + @NotBlank(message = "手机号不能为空") + private String cellPhone; + + /** + * 用户密码 + */ + @ApiModelProperty(value = "用户密码") + @NotBlank(message = "密码不能为空") + private String password; + +} diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/form/AppRegisterBody.java b/xinquan-auth/src/main/java/com/xinquan/auth/form/AppRegisterBody.java index 4fda916..b1407b3 100644 --- a/xinquan-auth/src/main/java/com/xinquan/auth/form/AppRegisterBody.java +++ b/xinquan-auth/src/main/java/com/xinquan/auth/form/AppRegisterBody.java @@ -1,10 +1,12 @@ package com.xinquan.auth.form; +import com.xinquan.system.api.model.AppCaptchaBody; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import javax.validation.constraints.NotBlank; import lombok.Data; +import lombok.EqualsAndHashCode; /** * 用户注册对象 @@ -12,23 +14,16 @@ * @author ruoyi */ @Data +@EqualsAndHashCode(callSuper = true) @ApiModel(value = "APP端注册对象", description = "APP端注册对象") -public class AppRegisterBody implements Serializable +public class AppRegisterBody extends AppCaptchaBody implements Serializable { private static final long serialVersionUID = 438348119520198682L; - @ApiModelProperty(value = "电话号码") - @NotBlank(message = "电话号码不能为空") - private String cellPhone; - @ApiModelProperty(value = "用户密码") @NotBlank(message = "用户密码不能为空") private String password; - - @ApiModelProperty("验证码") - @NotBlank(message = "验证码不能为空") - private String verifyCode; @ApiModelProperty("邀请人id") private Long inviteUserId; diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/form/VerifyResultVO.java b/xinquan-auth/src/main/java/com/xinquan/auth/form/VerifyResultVO.java new file mode 100644 index 0000000..2055d54 --- /dev/null +++ b/xinquan-auth/src/main/java/com/xinquan/auth/form/VerifyResultVO.java @@ -0,0 +1,23 @@ +package com.xinquan.auth.form; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * @author mitao + * @date 2024/8/22 + */ +@Data +@ApiModel("手机号验证结果") +public class VerifyResultVO implements Serializable { + + private static final long serialVersionUID = -1642557986917707324L; + @ApiModelProperty("密码修改秘钥") + private String secret; + + @ApiModelProperty("是否验证成功") + private Boolean successFlag; + +} diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java b/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java index 144e53b..36d0fc3 100644 --- a/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java +++ b/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java @@ -2,12 +2,17 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; +import com.xinquan.auth.form.AppChangePwdBody; +import com.xinquan.auth.form.AppLoginBody; import com.xinquan.auth.form.AppRegisterBody; +import com.xinquan.auth.form.VerifyResultVO; +import com.xinquan.auth.util.HuaWeiSMSUtil; import com.xinquan.common.core.constant.CacheConstants; import com.xinquan.common.core.constant.Constants; import com.xinquan.common.core.constant.SecurityConstants; import com.xinquan.common.core.constant.UserConstants; import com.xinquan.common.core.domain.R; +import com.xinquan.common.core.enums.AppUserStatusEnum; import com.xinquan.common.core.enums.UserStatus; import com.xinquan.common.core.exception.ServiceException; import com.xinquan.common.core.text.Convert; @@ -17,7 +22,13 @@ import com.xinquan.common.security.utils.SecurityUtils; import com.xinquan.system.api.RemoteUserService; import com.xinquan.system.api.domain.SysUser; +import com.xinquan.system.api.feignClient.SysUserClient; +import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppVerifyCellPhoneBody; +import com.xinquan.system.api.model.AppWXLoginBody; +import com.xinquan.system.api.model.AppleLoginUser; import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; import com.xinquan.user.api.feign.RemoteAppUserService; @@ -25,6 +36,8 @@ import java.time.LocalDateTime; import java.util.Objects; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -53,6 +66,8 @@ @Autowired private RemoteAppUserService remoteAppUserService; + @Autowired + private SysUserClient sysUserClient; /** * 登录 */ @@ -163,7 +178,8 @@ String cellPhone = appRegisterBody.getCellPhone(); String password = appRegisterBody.getPassword(); //验证码校验 - if (!verifyCode(cellPhone, appRegisterBody.getVerifyCode())) + if (!verifyCaptcha(cellPhone, appRegisterBody.getCaptcha(), + CacheConstants.APP_REGISTER_CAPTCHA_CODE_PREFIX)) { throw new ServiceException("验证码错误"); } @@ -211,14 +227,14 @@ /** * 校验验证码 * @param cellPhone 手机号 - * @param verifyCode 验证码 + * @param captcha 验证码 * @return true/false */ - private boolean verifyCode(String cellPhone, String verifyCode) { - if (StringUtils.isNotBlank(cellPhone) && StringUtils.isNotBlank(verifyCode)) { - String key = CacheConstants.APP_CAPTCHA_CODE_PREFIX + cellPhone; + private boolean verifyCaptcha(String cellPhone, String captcha, String keyPrefix) { + if (StringUtils.isNotBlank(cellPhone) && StringUtils.isNotBlank(captcha)) { + String key = keyPrefix + cellPhone; String code = redisService.getCacheObject(key); - if (StringUtils.isNotBlank(code) && code.equals(verifyCode)) { + if (StringUtils.isNotBlank(code) && code.equals(captcha)) { redisService.deleteObject(key); return true; } @@ -227,25 +243,228 @@ } /** - * 发送验证码 - * @param cellPhone 手机号码 + * 根据类型获取对象的验证码key + * + * @param type + * @return */ - public void sendCaptchaCode(String cellPhone) { - Boolean result = redisService.hasKey( - CacheConstants.APP_CAPTCHA_CODE_PREFIX + cellPhone); + private String getCaptchaCodeByTypePrefix(Integer type) { + switch (type) { + case 1: + return CacheConstants.APP_REGISTER_CAPTCHA_CODE_PREFIX; + case 2: + return CacheConstants.APP_LOGIN_CAPTCHA_CODE_PREFIX; + case 3: + return CacheConstants.APP_PASSWORD_CAPTCHA_CODE_PREFIX; + case 4: + return CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX; + default: + return ""; + } + } + /** + * 发送验证码 + * + * @param cellPhone 手机号码 + * @param type + */ + public void sendCaptchaCode(String cellPhone, Integer type) { + String key = getCaptchaCodeByTypePrefix(type); + Boolean result = redisService.hasKey(key + cellPhone); if (result) { throw new ServiceException("请勿重复发送验证码"); } String code = RandomUtil.randomNumbers(6); try { - //TODO 发送短信 - log.info("发送验证码成功,手机号:{} 验证码:{}", cellPhone,code); + log.info("发送验证码成功,手机号:{} 验证码:{}", cellPhone, code); + // TODO 修改sender参数及templateId + HuaWeiSMSUtil.sendSms("[\"" + code + "\"]", cellPhone, "8823121426646", + "cf1707ec44694627b1b483b0277e12fd"); } catch (Exception e) { log.error("发送短信失败", e); throw new ServiceException("验证码发送失败"); } //将验证码放入redis - redisService.setCacheObject(CacheConstants.APP_CAPTCHA_CODE_PREFIX + cellPhone, code, 5L, + redisService.setCacheObject(key + cellPhone, code, 5L, TimeUnit.MINUTES); } + + /** + * APP账号密码登录 + * + * @param body + * @return + */ + public LoginUser appLogin(AppLoginBody body) { + + // IP黑名单校验 + String blackStr = Convert.toStr( + redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) { + recordLogService.recordLogininfor(body.getCellPhone(), Constants.LOGIN_FAIL, + "很遗憾,访问IP已被列入系统黑名单"); + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } + // 查询用户信息 + AppUser appUser = remoteAppUserService.getUserByCondition( + AppUserDTO.builder().cellPhone(body.getCellPhone()).build(), + SecurityConstants.INNER).getData(); + if (StringUtils.isNull(appUser)) { + recordLogService.recordLogininfor(body.getCellPhone(), Constants.LOGIN_FAIL, + "登录用户不存在"); + throw new ServiceException("登录用户:" + body.getCellPhone() + " 不存在"); + } + // 1:正常 2:冻结 3:注销 + if (appUser.getUserStatus().equals(AppUserStatusEnum.FROZEN.getCode())) { + recordLogService.recordLogininfor(body.getCellPhone(), Constants.LOGIN_FAIL, + "账号已冻结"); + throw new ServiceException("账号已冻结"); + } + if (appUser.getUserStatus().equals(AppUserStatusEnum.LOGOUT.getCode())) { + recordLogService.recordLogininfor(body.getCellPhone(), Constants.LOGIN_FAIL, + "账号已注销"); + throw new ServiceException("账号已注销"); + } + // 查询系统用户信息 + SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); + if (StringUtils.isNull(sysUser)) { + recordLogService.recordLogininfor(body.getCellPhone(), Constants.LOGIN_FAIL, + "登录用户不存在"); + throw new ServiceException("登录用户:" + body.getCellPhone() + " 不存在"); + } + // 校验账号密码 + passwordService.validate(sysUser, body.getPassword()); + LoginUser userInfo = new LoginUser(); + userInfo.setSysUser(sysUser); + recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, + "登录成功"); + return userInfo; + } + + /** + * APP微信登录 + * + * @param body + * @return + */ + public WXLoginUser wxLogin(AppWXLoginBody body) { + // 通过wxOpenId查询APP用户信息 + R<WXLoginUser> userResult = remoteAppUserService.wxLogin(body, SecurityConstants.INNER); + if (R.FAIL == userResult.getCode()) { + throw new ServiceException(userResult.getMsg()); + } + + return userResult.getData(); + } + + /** + * 苹果登录 + * + * @param appleId 苹果id + * @return + */ + public AppleLoginUser appleLogin(String appleId) { + R<AppleLoginUser> userResult = remoteAppUserService.appleLogin(appleId, + SecurityConstants.INNER); + if (R.FAIL == userResult.getCode()) { + throw new ServiceException(userResult.getMsg()); + } + return userResult.getData(); + } + + /** + * 验证手机号 + * + * @param body + * @return + */ + public VerifyResultVO verifyPhone(AppCaptchaBody body) { + VerifyResultVO verifyResultVO = new VerifyResultVO(); + boolean b = verifyCaptcha(body.getCellPhone(), body.getCaptcha(), + CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX); + verifyResultVO.setSuccessFlag(b); + if (b) { + // 验证成功,删除验证码 + redisService.deleteObject( + CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX + body.getCellPhone()); + verifyResultVO.setSecret(IdUtil.randomUUID()); + redisService.setCacheObject( + CacheConstants.APP_PASSWORD_SECRET_PREFIX + body.getCellPhone(), + verifyResultVO.getSecret(), 10L, TimeUnit.MINUTES); + } + return verifyResultVO; + } + + public void changePassword(AppChangePwdBody body) { + Object baseSecret = redisService.getCacheObject( + CacheConstants.APP_PASSWORD_SECRET_PREFIX + body.getCellPhone()); + if (Objects.isNull(baseSecret)) { + throw new ServiceException("密码修改秘钥已失效,请重新校验手机号获取"); + } + if (!body.getSecret().equals(baseSecret.toString())) { + throw new ServiceException("密码修改秘钥不正确"); + } + // 校验密码,密码至少8个字符,不能全是字母或者数字 + String regex = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$\n"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(body.getPassword()); + if (!matcher.matches()) { + throw new ServiceException("密码至少8个字符,不能全是字母或者数字"); + } + // 根据手机号查询用户 + AppUser appUser = remoteAppUserService.getUserByCondition( + AppUserDTO.builder().cellPhone(body.getCellPhone()).build(), + SecurityConstants.INNER).getData(); + if (Objects.isNull(appUser)) { + throw new ServiceException("用户不存在或已注销"); + } + // 查询系统用户 + SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); + if (Objects.isNull(sysUser)) { + throw new ServiceException("用户不存在或已注销"); + } + // 修改密码 + sysUser.setPassword(SecurityUtils.encryptPassword(body.getPassword())); + sysUserClient.updateUser(sysUser); + redisService.deleteObject(CacheConstants.APP_PASSWORD_SECRET_PREFIX + body.getCellPhone()); + } + + /** + * 验证码登录 + * + * @param body + * @return + */ + public LoginUser appCaptchaLogin(AppCaptchaBody body) { + // 校验验证码 + if (!verifyCaptcha(body.getCellPhone(), body.getCaptcha(), + CacheConstants.APP_LOGIN_CAPTCHA_CODE_PREFIX)) { + throw new ServiceException("验证码不正确"); + } + R<LoginUser> loginUserR = remoteAppUserService.appCaptchaLogin(body, + SecurityConstants.INNER); + if (R.FAIL == loginUserR.getCode()) { + throw new ServiceException(loginUserR.getMsg()); + } + return loginUserR.getData(); + } + + public WXLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) { + String captcha = redisService.getCacheObject( + CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX + body.getCellPhone()); + if (Objects.isNull(captcha)) { + throw new ServiceException("验证码已失效,请重新获取"); + } + // 校验验证码 + if (!verifyCaptcha(body.getCellPhone(), body.getCaptcha(), + CacheConstants.APP_LOGIN_CAPTCHA_CODE_PREFIX)) { + throw new ServiceException("验证码不正确"); + } + // 更新用户系统用户信息 + R<WXLoginUser> result = remoteAppUserService.verifyCellPhone(body, SecurityConstants.INNER); + if (R.FAIL == result.getCode()) { + throw new ServiceException(result.getMsg()); + } + return result.getData(); + } } diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/util/HuaWeiSMSUtil.java b/xinquan-auth/src/main/java/com/xinquan/auth/util/HuaWeiSMSUtil.java new file mode 100644 index 0000000..4e2f386 --- /dev/null +++ b/xinquan-auth/src/main/java/com/xinquan/auth/util/HuaWeiSMSUtil.java @@ -0,0 +1,189 @@ +package com.xinquan.auth.util; + +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.methods.RequestBuilder; +import org.apache.http.client.utils.URLEncodedUtils; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.util.EntityUtils; + +// 如果JDK版本是1.8,可使用原生Base64类 + +public class HuaWeiSMSUtil { + + // 无需修改,用于格式化鉴权头域,给"X-WSSE"参数赋值 + private static final String WSSE_HEADER_FORMAT = "UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\""; + // 无需修改,用于格式化鉴权头域,给"Authorization"参数赋值 + private static final String AUTH_HEADER_VALUE = "WSSE realm=\"SDP\",profile=\"UsernameToken\",type=\"Appkey\""; + + public static void main(String[] args) throws Exception { + + sendSms("[\"" + 12356 + "\"]", "18283820718", "8823121426646", + "cf1707ec44694627b1b483b0277e12fd"); + +// sendSms("[\"17623778642\",\"蓉A-7823\"]","17623778642","8819122535459","6c848255000c4619833ab690e393f906"); +// sendSms("[\"17623778642\",\"蓉A-7823\",\"2019/12/27\",\"14:00\"]","17623778642","8819122535459","bb13d00d11e043659001a89c72d54cab"); + } + + /** + * 调用短信 + * + * @param code 入参 + * @param phone 接收短信手机号 + * @param sender 国内短信签名通道号或国际/港澳台短信通道号 + * @param templateId 模板ID + * @throws Exception + */ + public static void sendSms(String code, String phone, String sender, String templateId) + throws Exception { + // TODO 必填,请参考"开发准备"获取如下数据,替换为实际值 + String url = "https://smsapi.cn-north-4.myhuaweicloud.com:443/sms/batchSendSms/v1"; // APP接入地址+接口访问URI + String appKey = "tTMBH29Tm6tKKHf882JXob82P1rb"; // APP_Key + String appSecret = "Ob02q15WAgDZRwW9kDlVPklBSdfR"; // APP_Secret + + // 条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称 + // 国际/港澳台短信不用关注该参数 + String signature = null; // 签名名称 + + // 必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔 + String receiver = "+86" + phone; // 短信接收人号码 + + // 选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告 + String statusCallBack = ""; + + /** + * 选填,使用无变量模板时请赋空值 String templateParas = ""; + * 单变量模板示例:模板内容为"您的验证码是${NUM_6}"时,templateParas可填写为"[\"369751\"]" + * 双变量模板示例:模板内容为"您有${NUM_2}件快递请到${TXT_20}领取"时,templateParas可填写为"[\"3\",\"人民公园正门\"]" + * ${DATE}${TIME}变量不允许取值为空,${TXT_20}变量可以使用英文空格或点号替代空值,${NUM_6}变量可以使用0替代空值 + * 查看更多模板和变量规范:产品介绍>模板和变量规范 + */ + String templateParas = code; // 模板变量 + + // 请求Body,不携带签名名称时,signature请填null + String body = buildRequestBody(sender, receiver, templateId, templateParas, statusCallBack, + signature); + if (null == body || body.isEmpty()) { + System.out.println("body is null."); + return; + } + + // 请求Headers中的X-WSSE参数值 + String wsseHeader = buildWsseHeader(appKey, appSecret); + if (null == wsseHeader || wsseHeader.isEmpty()) { + System.out.println("wsse header is null."); + return; + } + + // 如果JDK版本低于1.8,可使用如下代码 + // 为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 + // CloseableHttpClient client = HttpClients.custom() + // .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + // @Override + // public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + // return true; + // } + // }).build()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build(); + + // 如果JDK版本是1.8,可使用如下代码 + // 为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 + CloseableHttpClient client = HttpClients.custom() + .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, + (x509CertChain, authType) -> true).build()) + .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) + .build(); + + HttpResponse response = client.execute(RequestBuilder.create("POST")// 请求方法POST + .setUri(url) + .addHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded") + .addHeader(HttpHeaders.AUTHORIZATION, AUTH_HEADER_VALUE) + .addHeader("X-WSSE", wsseHeader) + .setEntity(new StringEntity(body)).build()); + + System.out.println(response.toString()); // 打印响应头域信息 + System.out.println(EntityUtils.toString(response.getEntity())); // 打印响应消息实体 + } + + /** + * 构造请求Body体 + * + * @param sender + * @param receiver + * @param templateId + * @param templateParas + * @param statusCallbackUrl + * @param signature | 签名名称,使用国内短信通用模板时填写 + * @return + */ + static String buildRequestBody(String sender, String receiver, String templateId, + String templateParas, + String statusCallbackUrl, String signature) { + if (null == sender || null == receiver || null == templateId || sender.isEmpty() + || receiver.isEmpty() + || templateId.isEmpty()) { + System.out.println("buildRequestBody(): sender, receiver or templateId is null."); + return null; + } + List<NameValuePair> keyValues = new ArrayList<NameValuePair>(); + + keyValues.add(new BasicNameValuePair("from", sender)); + keyValues.add(new BasicNameValuePair("to", receiver)); + keyValues.add(new BasicNameValuePair("templateId", templateId)); + if (null != templateParas && !templateParas.isEmpty()) { + keyValues.add(new BasicNameValuePair("templateParas", templateParas)); + } + if (null != statusCallbackUrl && !statusCallbackUrl.isEmpty()) { + keyValues.add(new BasicNameValuePair("statusCallback", statusCallbackUrl)); + } + if (null != signature && !signature.isEmpty()) { + keyValues.add(new BasicNameValuePair("signature", signature)); + } + + return URLEncodedUtils.format(keyValues, Charset.forName("UTF-8")); + } + + /** + * 构造X-WSSE参数值 + * + * @param appKey + * @param appSecret + * @return + */ + static String buildWsseHeader(String appKey, String appSecret) { + if (null == appKey || null == appSecret || appKey.isEmpty() || appSecret.isEmpty()) { + System.out.println("buildWsseHeader(): appKey or appSecret is null."); + return null; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); + String time = sdf.format(new Date()); // Created + String nonce = UUID.randomUUID().toString().replace("-", ""); // Nonce + + byte[] passwordDigest = DigestUtils.sha256(nonce + time + appSecret); + String hexDigest = Hex.encodeHexString(passwordDigest); + + // 如果JDK版本是1.8,请加载原生Base64类,并使用如下代码 + String passwordDigestBase64Str = Base64.getEncoder() + .encodeToString(hexDigest.getBytes()); // PasswordDigest + // 如果JDK版本低于1.8,请加载三方库提供Base64类,并使用如下代码 + // String passwordDigestBase64Str = Base64.encodeBase64String(hexDigest.getBytes(Charset.forName("utf-8"))); //PasswordDigest + // 若passwordDigestBase64Str中包含换行符,请执行如下代码进行修正 + // passwordDigestBase64Str = passwordDigestBase64Str.replaceAll("[\\s*\t\n\r]", ""); + + return String.format(WSSE_HEADER_FORMAT, appKey, passwordDigestBase64Str, nonce, time); + } +} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/config/MybatisPlusConfig.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/config/MybatisPlusConfig.java new file mode 100644 index 0000000..3195c5a --- /dev/null +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/config/MybatisPlusConfig.java @@ -0,0 +1,58 @@ +package com.xinquan.common.core.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * Mybatis Plus 配置 + * + * @author ruoyi + */ +@EnableTransactionManagement(proxyTargetClass = true) +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 分页插件 + interceptor.addInnerInterceptor(paginationInnerInterceptor()); + // 乐观锁插件 + interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); + // 阻断插件 + interceptor.addInnerInterceptor(blockAttackInnerInterceptor()); + return interceptor; + } + + /** + * 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html + */ + public PaginationInnerInterceptor paginationInnerInterceptor() { + PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); + // 设置数据库类型为mysql + paginationInnerInterceptor.setDbType(DbType.MYSQL); + // 设置最大单页限制数量,默认 500 条,-1 不受限制 + paginationInnerInterceptor.setMaxLimit(-1L); + return paginationInnerInterceptor; + } + + /** + * 乐观锁插件 https://baomidou.com/guide/interceptor-optimistic-locker.html + */ + public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { + return new OptimisticLockerInnerInterceptor(); + } + + /** + * 如果是对全表的删除或更新操作,就会终止该操作 https://baomidou.com/guide/interceptor-block-attack.html + */ + public BlockAttackInnerInterceptor blockAttackInnerInterceptor() { + return new BlockAttackInnerInterceptor(); + } +} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/CacheConstants.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/CacheConstants.java index 26266ab..b07c78d 100644 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/CacheConstants.java +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/CacheConstants.java @@ -56,5 +56,26 @@ * 登录IP黑名单 cache key */ public static final String SYS_LOGIN_BLACKIPLIST = SYS_CONFIG_KEY + "sys.login.blackIPList"; - public static final String APP_CAPTCHA_CODE_PREFIX = "app_captcha_code:"; + + /** + * APP注册验证码 redis key + */ + public static final String APP_REGISTER_CAPTCHA_CODE_PREFIX = "app_register_captcha_code:"; + /** + * APP登录验证码 redis key + */ + public static final String APP_LOGIN_CAPTCHA_CODE_PREFIX = "app_login_captcha_code:"; + /** + * APP修改密码验证码 redis key + */ + public static final String APP_PASSWORD_CAPTCHA_CODE_PREFIX = "app_password_captcha_code:"; + /** + * APP第三方登录手机号校验验证码 redis key + */ + public static final String APP_VERIFY_CAPTCHA_CODE_PREFIX = "app_verify_captcha_code:"; + /** + * APP第三方登录手机号校验验证码修改密码秘钥 redis key + */ + public static final String APP_PASSWORD_SECRET_PREFIX = "app_password_secret:"; + } diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/Constants.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/Constants.java index 9f00c38..72b3b35 100644 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/Constants.java +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/Constants.java @@ -133,4 +133,8 @@ */ public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", "org.springframework", "org.apache", "com.xinquan.common.core.utils.file" }; + /** + * 默认密码 + */ + public static final String DEFAULT_PASSWORD = "123456"; } diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/SecurityConstants.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/SecurityConstants.java index d775d0e..edc53fd 100644 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/SecurityConstants.java +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/SecurityConstants.java @@ -18,6 +18,11 @@ public static final String DETAILS_USERNAME = "username"; /** + * 登录端 + */ + public static final String LOGIN_FROM = "login_from"; + + /** * 授权信息字段 */ public static final String AUTHORIZATION_HEADER = "Authorization"; diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/ServiceNameConstants.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/ServiceNameConstants.java index ad644cd..44687f2 100644 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/ServiceNameConstants.java +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/constant/ServiceNameConstants.java @@ -24,15 +24,19 @@ /** * 课程服务的serviceid */ - public static final String COURSE = "xinquan-course"; + public static final String COURSE_SERVICE = "xinquan-course"; /** - * 车辆服务的serviceid + * 用户服务的serviceid */ - public static final String APP_USER = "xinquan-user"; + public static final String APP_USER_SERVICE = "xinquan-user"; /** - * 车辆合同的serviceid + * 冥想服务的serviceid */ - public static final String CONTRACT_SERVICE = "xinquan-contract"; + public static final String MEDITATION_SERVICE = "xinquan-meditation"; + /** + * 订单服务 + */ + public static final String ORDER_SERVICE = "xinquan-order"; } diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AppUserStatusEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AppUserStatusEnum.java new file mode 100644 index 0000000..ab4cf8e --- /dev/null +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AppUserStatusEnum.java @@ -0,0 +1,24 @@ +package com.xinquan.common.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum AppUserStatusEnum { + NORMAL(1, "正常"), + FROZEN(2, "冻结"), + LOGOUT(3, "注销"); + + private final Integer code; + private final String desc; + + public static AppUserStatusEnum getEnumByCode(Integer code) { + for (AppUserStatusEnum e : AppUserStatusEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ApproveConfigEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ApproveConfigEnum.java deleted file mode 100644 index 8efb987..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ApproveConfigEnum.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum ApproveConfigEnum { - - /*审批类型 1=交车审批、2=续约审批、3=退车审批*/ - - DELIVERY_APPROVAL(1, "交车审批"), - RENEWAL_APPROVAL(2, "续约审批"), - RETURN_APPROVAL(3, "退车审批"); - - @Getter - private String desc; - - - @Getter - private int code; - - - ApproveConfigEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static ApproveConfigEnum fromCode(Integer code) { - ApproveConfigEnum[] resultTypes = ApproveConfigEnum.values(); - for (ApproveConfigEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AuditStateEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AuditStateEnum.java deleted file mode 100644 index 262dabb..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AuditStateEnum.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum AuditStateEnum { - - /*审核状态 0待审批 1通过 2驳回 3已撤回*/ - - PENDING_APPROVAL(0, "待审批"), - APPROVED(1, "审批通过"), - APPROVAL_REJECTION(2, "审批驳回"), - WITHDRAWN(3, "已撤回"); - - @Getter - private String desc; - - - @Getter - private int code; - - - AuditStateEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static AuditStateEnum fromCode(Integer code) { - AuditStateEnum[] resultTypes = AuditStateEnum.values(); - for (AuditStateEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AuditTypeEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AuditTypeEnum.java deleted file mode 100644 index 56fdb71..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/AuditTypeEnum.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum AuditTypeEnum { - - /*审核类型 1交车申请 2续约申请 3退车申请 4事故账单申请*/ - - DELIVERY_APPLICATION(1, "交车申请"), - RENEWAL_APPLICATION(2, "续约申请"), - RETURN_APPLICATION(3, "退车申请"), - ACCIDENT_BILL_APPLICATION(4, "事故账单申请"); - - @Getter - private String desc; - - - @Getter - private int code; - - - AuditTypeEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static AuditTypeEnum fromCode(Integer code) { - AuditTypeEnum[] resultTypes = AuditTypeEnum.values(); - for (AuditTypeEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/CarColorEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/CarColorEnum.java deleted file mode 100644 index 8d5ccc4..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/CarColorEnum.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum CarColorEnum { - - /*1=白色、2=黑色、3=银色、4=灰色、5=红色、6=蓝色、7=绿色、8=黄色、9=金色、10=紫色、11=橙色、12=其他*/ - - WHITE(1, "白色"), - BLACK(2, "黑色"), - SILVERY(3, "银色"), - GREY(4, "灰色"), - RED(5, "红色"), - BLUE(6, "蓝色"), - GREEN(7, "绿色"), - YELLOW(8, "黄色"), - GOLDEN(9, "金色"), - PURPLE(10, "紫色"), - ORANGE(11, "橙色"), - OTHER(12, "其他"); - - @Getter - private String desc; - - - @Getter - private int code; - - - CarColorEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static CarColorEnum fromCode(Integer code) { - CarColorEnum[] resultTypes = CarColorEnum.values(); - for (CarColorEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/CarStateEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/CarStateEnum.java deleted file mode 100644 index 7d752fc..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/CarStateEnum.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum CarStateEnum { - - /*状态1= 待上户、2=待办证、3=待整备、4=待租、5=已租、6=已处置*/ - - PENDING_REGISTRATION(1, "待上户"), - PENDING_CERTIFICATE(2, "待办证"), - TO_BE_PREPARED(3, "待整备"), - FOR_RENT(4, "待租"), - RENTED(5, "已租"), - DISPOSED(6, "已处置"); - - @Getter - private String desc; - - - @Getter - private int code; - - - CarStateEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static CarStateEnum fromCode(Integer code) { - CarStateEnum[] resultTypes = CarStateEnum.values(); - for (CarStateEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ConfigEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ConfigEnum.java new file mode 100644 index 0000000..3ef84da --- /dev/null +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ConfigEnum.java @@ -0,0 +1,63 @@ +package com.xinquan.common.core.enums; + +import com.fasterxml.jackson.annotation.JsonFormat; +import java.util.HashMap; +import java.util.Map; +import lombok.Getter; + +/** + * @ClassName ConfigEnum + * @Description TODO + * @Author jqs + * @Date 2023/6/6 10:35 + * @Version 1.0 + */ + +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +@Getter +public enum ConfigEnum { + + PLATFORM_SERVICE_PHONE("PLATFORM_SERVICE_PHONE", 1, "客服电话"), + PLATFORM_SERVICE_CODE("PLATFORM_SERVICE_CODE", 1, "客服二维码"), + SHOP_EMERGENCY_DEGREE("SHOP_EMERGENCY_DEGREE", 3, "合作商任务紧急程度"), + SHOP_FOLLOW_TYPE("SHOP_FOLLOW_TYPE", 3, "合作商跟进类型"), + SHOP_CUSTOM_STATUS("SHOP_CUSTOM_STATUS", 3, "合作商状态"), + SHOP_SOURCE_CHANNEL("SHOP_SOURCE_CHANNEL", 3, "来源渠道"), + SHARE_INTEGRAL("SHARE_INTEGRAL", 2, "分享小程序可获得积分"), + SUGGEST_PLATFORM_INTEGRAL("SUGGEST_PLATFORM_INTEGRAL", 2, "平台建议可获得积分"), + SIGN_IN_INTEGRAL("SIGN_IN_INTEGRAL", 2, "每日签到可获得积分"), + SUGGEST_SHOP_INTEGRAL("SUGGEST_SHOP_INTEGRAL", 2, "门店建议可获得积分"), + ORDER_AUTO_CANCEL_TIME("ORDER_AUTO_CANCEL_TIME", 2, "C端订单自动取消时间"), + PAY_MONEY_INTEGRAL("PAY_MONEY_INTEGRAL", 2, "购物满1元可获得积分"), + MEMBER_SOURCE_CHANNEL("MEMBER_SOURCE_CHANNEL", 4, "会员来源"), + MEMBER_CHARACTER("MEMBER_CHARACTER", 4, "会员性格"), + MEMBER_LEVEL("MEMBER_LEVEL", 4, "会员等级"), + MEMBER_TYPE("MEMBER_TYPE", 4, "会员类型"), + NURSE_PROBLEM("NURSE_PROBLEM", 4, "调理问题"), + HOME_STYLE("HOME_STYLE", 2, "首页风格"), + HOME_SLOGAN("HOME_SLOGAN", 1, "首页广告语"), + HOME_LOGO("HOME_LOGO", 1, "首页logo"), + SHOP_COMMON_PROPORTION("SHOP_COMMON_PROPORTION", 3, "商户统一分成"); + + + private final String key; + private final Integer keyType; + private final String keyName; + private static final Map<String, ConfigEnum> valueMap = new HashMap<>(); + + static { + for (ConfigEnum configEnum : ConfigEnum.values()) { + valueMap.put(configEnum.keyName, configEnum); + } + } + + ConfigEnum(String key, Integer keyType, String keyName) { + this.key = key; + this.keyType = keyType; + this.keyName = keyName; + } + + public static ConfigEnum getByKeyName(String keyName) { + return valueMap.get(keyName); + } +} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ContractStateEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ContractStateEnum.java deleted file mode 100644 index e1a13aa..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ContractStateEnum.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum ContractStateEnum { - - /*合同状态 1签约中 2审批拒绝 3续约中 4待执行 5执行中 6结算中 7已结束 8已作废 9即将到期 10已到期 11已撤销*/ - - SIGNING(1, "签约中"), - APPROVAL_REJECTION(2, "审批拒绝"), - UNDER_RENEWAL(3, "续约中"), - TO_BE_EXECUTED(4, "待执行"), - UNDER_EXECUTION(5, "执行中"), - SETTLEMENT_PROGRESS(6, "结算中"), - ENDED(7, "已结束"), - VOIDED(8, "已作废"), - DUE(9, "即将到期"), - EXPIRED(10, "已到期"), - REVOKED(11, "已撤销"); - - @Getter - private String desc; - - - @Getter - private int code; - - - ContractStateEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static ContractStateEnum fromCode(Integer code) { - ContractStateEnum[] resultTypes = ContractStateEnum.values(); - for (ContractStateEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ContractTypeEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ContractTypeEnum.java deleted file mode 100644 index 4ec2f2f..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ContractTypeEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum ContractTypeEnum { - - /*合同类型 1=纯租 2=以租代购 3=打工模式*/ - PURE_RENT(1, "纯租"), - CAR_LEASE(2, "以租代购"), - WORKING_MODE(3, "打工模式"); - - @Getter - private String desc; - - - @Getter - private int code; - - - ContractTypeEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static ContractTypeEnum fromCode(Integer code) { - ContractTypeEnum[] resultTypes = ContractTypeEnum.values(); - for (ContractTypeEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/DisabledEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/DisabledEnum.java index 06cc9ca..fbc94a1 100644 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/DisabledEnum.java +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/DisabledEnum.java @@ -8,15 +8,15 @@ * @Description * @date 2022-06-08 16:55 */ +@Getter public enum DisabledEnum { - NO(0, "否"), - YES(1, "是"); - @Getter + YES(1, "是"), + NO(2, "否"); + private String desc; - @Getter private int code; diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/HandoverStateEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/HandoverStateEnum.java deleted file mode 100644 index 23bfe20..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/HandoverStateEnum.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum HandoverStateEnum { - - /*交车状态 1待交车 2待审批 3已交车 4审批拒绝*/ - - VEHICLE_DELIVERED(1, "待交车"), - PENDING_APPROVAL(2, "待审批"), - DELIVERED(3, "已交车"), - APPROVAL_REJECTION(4, "审批拒绝"), - REVOKED(5, "已撤销"); - - @Getter - private String desc; - - - @Getter - private int code; - - - HandoverStateEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static HandoverStateEnum fromCode(Integer code) { - HandoverStateEnum[] resultTypes = HandoverStateEnum.values(); - for (HandoverStateEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ImportTypeEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ImportTypeEnum.java deleted file mode 100644 index 2a4456f..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ImportTypeEnum.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum ImportTypeEnum { - - /*1=新车车辆导入 、2=已有车辆导入、3=上户导入、4=设备导入、5=违章导入、6=违章图片导入、7=保养记录导入、8=保单导入、9=合同导入*/ - - NEW_CAR(1, "新车车辆导入"), - EXIST_CAR(2, "已有车辆导入"), - WEALTHY(3, "上户导入"), - DEVICE(4, "设备导入"), - VIOLATION(5, "违章导入"), - VIOLATION_PICTURE(6, "违章图片导入"), - SERVICE(7, "保养记录导入"), - WARRANTY(8, "保单导入"), - CONTRACT(9, "合同导入"), - CERTIFICATE(10, "办证导入"), - INSPECTANNUALLY(11, "车辆年检导入"), - MAINTENANCE(12, "车辆维修导入"); - - @Getter - private String desc; - - - @Getter - private int code; - - - ImportTypeEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static ImportTypeEnum fromCode(Integer code) { - ImportTypeEnum[] resultTypes = ImportTypeEnum.values(); - for (ImportTypeEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/InsureTypeEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/InsureTypeEnum.java deleted file mode 100644 index fcacfda..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/InsureTypeEnum.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum InsureTypeEnum { - - /*保险类型 1=商业险、2=交强险、3=承运人责任险、4=客伤险、5=盗抢险*/ - - COMMERCIAL_INSURANCE(1, "商业险"), - COMPULSORY_INSURANCE(2, "交强险"), - CARRIER_LIABILITY_INSURANCE(3, "承运人责任险"), - CUSTOMER_INJURY_INSURANCE(4, "客伤险"), - THEFT_INSURANCE(5, "盗抢险"); - - @Getter - private String desc; - - - @Getter - private int code; - - - InsureTypeEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static InsureTypeEnum fromCode(Integer code) { - InsureTypeEnum[] resultTypes = InsureTypeEnum.values(); - for (InsureTypeEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ListingStatusEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ListingStatusEnum.java new file mode 100644 index 0000000..17881ca --- /dev/null +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ListingStatusEnum.java @@ -0,0 +1,39 @@ +package com.xinquan.common.core.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + + +@Getter +@AllArgsConstructor +public enum ListingStatusEnum { + + /*上架状态 0=上架中 1=已下架*/ + + ON_SHELVES(0, "上架中"), + REMOVED_FROM_THE_SHELF(1, "已下架"); + @EnumValue + private final int code; + @JsonValue + private final String desc; + + + /** + * 通过code获取枚举 + * + * @param code + * @return + */ + public static ListingStatusEnum fromCode(Integer code) { + ListingStatusEnum[] resultTypes = ListingStatusEnum.values(); + for (ListingStatusEnum resultType : resultTypes) { + if (code.equals(resultType.getCode())) { + return resultType; + } + } + return null; + } + +} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/PurchaseStateEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/PurchaseStateEnum.java deleted file mode 100644 index c3a58af..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/PurchaseStateEnum.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum PurchaseStateEnum { - - /*购买状态 1在保 2停保 3复保 4脱保*/ - - UNDER_PROTECTION(1, "在保"), - SUSPENSION_MAINTENANCE(2, "停保"), - REINSURANCE(3, "复保"), - DELISTING(4, "脱保"); - - @Getter - private String desc; - - - @Getter - private int code; - - - PurchaseStateEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static PurchaseStateEnum fromCode(Integer code) { - PurchaseStateEnum[] resultTypes = PurchaseStateEnum.values(); - for (PurchaseStateEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ReturnCarTypeEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ReturnCarTypeEnum.java deleted file mode 100644 index 4c1de25..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ReturnCarTypeEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum ReturnCarTypeEnum { - - /*合同类型 合同到期、提前退车、强制收车*/ - EXPIRE(1, "合同到期"), - EARLY_WITHDRAWAL(2, "提前退车"), - COMPULSORY_COLLECTION(3, "强制收车"); - - @Getter - private String desc; - - - @Getter - private int code; - - - ReturnCarTypeEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static ReturnCarTypeEnum fromCode(Integer code) { - ReturnCarTypeEnum[] resultTypes = ReturnCarTypeEnum.values(); - for (ReturnCarTypeEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ReturnStateEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ReturnStateEnum.java deleted file mode 100644 index c94f36a..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/ReturnStateEnum.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum ReturnStateEnum { - - /*退车状态 1=待验车 2=待生成账单 3=待审批 4=已退车 5=审批拒绝*/ - - VEHICLE_INSPECTED(1, "待验车"), - PENDING_BILL_GENERATION(2, "待生成账单"), - PENDING_APPROVAL(3, "待审批"), - RETURNED_VEHICLE(4, "已退车"), - APPROVAL_REJECTION(5, "审批拒绝"), - REVOKED(6, "已撤销"); - - @Getter - private String desc; - - - @Getter - private int code; - - - ReturnStateEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static ReturnStateEnum fromCode(Integer code) { - ReturnStateEnum[] resultTypes = ReturnStateEnum.values(); - for (ReturnStateEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/TreeLevelEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/TreeLevelEnum.java new file mode 100644 index 0000000..293d763 --- /dev/null +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/TreeLevelEnum.java @@ -0,0 +1,32 @@ +package com.xinquan.common.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum TreeLevelEnum { + SEED(1, "种子", 0), + SPROUTING(2, "发芽", 1000), + SEEDLING(3, "幼苗", 2000), + SMALL_SAPLINGS(4, "小树苗", 3000), + MEDIUM_SIZED_SAPLINGS(5, "中等树苗", 4000), + SMALL_TREE(5, "小树", 6000), + MEDIUM_TREE(6, "中树", 8000), + BIG_TREE(7, "大树", 10000), + MATURE_TREE(8, "成熟的大树", 12000), + TOWERING_TREES(8, "参天大树", 14400); + + private final Integer code; + private final String desc; + private final Integer growthValue; + + public static TreeLevelEnum getEnumByCode(Integer code) { + for (TreeLevelEnum e : TreeLevelEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/WarrantyStateEnum.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/WarrantyStateEnum.java deleted file mode 100644 index 7238ef6..0000000 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/enums/WarrantyStateEnum.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.xinquan.common.core.enums; - -import lombok.Getter; - -/** - * @Description - * @Author xiaochen - * @Date 2023/6/8 16:42 - */ -public enum WarrantyStateEnum { - - /*保单状态 1正常 2已脱保 3已停保 4即将到期 5建议停保*/ - - NORMAL(1, "正常"), - DELISTED(2, "已脱保"), - DISCONTINUED_WARRANTY(3, "已停保"), - DUE(4, "即将到期"), - SUGGEST_DISCONTINUING_MAINTENANCE(5, "建议停保"); - - @Getter - private String desc; - - - @Getter - private int code; - - - WarrantyStateEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } - - /** - * 通过code获取枚举 - * - * @param code - * @return - */ - public static WarrantyStateEnum fromCode(Integer code) { - WarrantyStateEnum[] resultTypes = WarrantyStateEnum.values(); - for (WarrantyStateEnum resultType : resultTypes) { - if (code.equals(resultType.getCode())) { - return resultType; - } - } - return null; - } - -} diff --git a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/web/domain/BaseModel.java b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/web/domain/BaseModel.java index 694c891..8f788a3 100644 --- a/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/web/domain/BaseModel.java +++ b/xinquan-common/xinquan-common-core/src/main/java/com/xinquan/common/core/web/domain/BaseModel.java @@ -3,7 +3,6 @@ import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.time.LocalDateTime; @@ -19,24 +18,24 @@ /** 创建者 */ @ApiModelProperty(value = "记录创建人,前端忽略") - @TableField(value = "createBy", fill = FieldFill.INSERT) + @TableField(value = "create_by", fill = FieldFill.INSERT) private String createBy; /** 创建时间 */ @ApiModelProperty(value = "记录创建时间,前端忽略") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @TableField(value = "createTime", fill = FieldFill.INSERT) + // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(value = "create_time", fill = FieldFill.INSERT) private LocalDateTime createTime; /** 更新者 */ @ApiModelProperty(value = "记录修改人,前端忽略") - @TableField(value = "updateBy", fill = FieldFill.INSERT_UPDATE) + @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) private String updateBy; /** 更新时间 */ @ApiModelProperty(value = "记录修改时间,前端忽略") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @TableField(value = "updateTime", fill = FieldFill.INSERT_UPDATE) + // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; /** 是否删除 0未删除 1已删除 */ diff --git a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/annotation/EnableCustomConfig.java b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/annotation/EnableCustomConfig.java index cd7e3de..b2b01e0 100644 --- a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/annotation/EnableCustomConfig.java +++ b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/annotation/EnableCustomConfig.java @@ -1,5 +1,7 @@ package com.xinquan.common.security.annotation; +import com.xinquan.common.security.config.ApplicationConfig; +import com.xinquan.common.security.feign.FeignAutoConfiguration; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; @@ -10,8 +12,6 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.Import; import org.springframework.scheduling.annotation.EnableAsync; -import com.xinquan.common.security.config.ApplicationConfig; -import com.xinquan.common.security.feign.FeignAutoConfiguration; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/JacksonConfig.java b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/JacksonConfig.java index aeb8196..369fb8b 100644 --- a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/JacksonConfig.java +++ b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/JacksonConfig.java @@ -1,33 +1,37 @@ package com.xinquan.common.security.config; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.MapperFeature; + import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import java.math.BigInteger; +import java.time.format.DateTimeFormatter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; - + /** * Jackson配置 */ -@Configuration +@ConditionalOnClass(ObjectMapper.class) public class JacksonConfig { - - @SuppressWarnings("deprecation") + + private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + private static final String DATE_PATTERN = "yyyy-MM-dd"; + @Bean - public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { - final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); - builder.serializationInclusion(JsonInclude.Include.NON_NULL); - final ObjectMapper objectMapper = builder.build(); - SimpleModule simpleModule = new SimpleModule(); - // Long 转为 String 防止 js 丢失精度 - simpleModule.addSerializer(Long.class, ToStringSerializer.instance); - objectMapper.registerModule(simpleModule); - // 忽略 transient 关键词属性 - objectMapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true); - return new MappingJackson2HttpMessageConverter(objectMapper); + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { + return jacksonObjectMapperBuilder -> { + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern( + DATE_TIME_PATTERN); + jacksonObjectMapperBuilder.timeZone("GMT+8"); + jacksonObjectMapperBuilder.serializers(new LocalDateTimeSerializer(dateTimeFormatter)); + jacksonObjectMapperBuilder.deserializers( + new LocalDateTimeDeserializer(dateTimeFormatter)); + // long -> string + jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance); + jacksonObjectMapperBuilder.serializerByType(BigInteger.class, + ToStringSerializer.instance); + }; } } \ No newline at end of file diff --git a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/LocalDateTimeSerializerConfig.java b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/LocalDateTimeSerializerConfig.java deleted file mode 100644 index 9ab600d..0000000 --- a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/config/LocalDateTimeSerializerConfig.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.xinquan.common.security.config; - -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.converter.Converter; - -@Configuration -public class LocalDateTimeSerializerConfig { - private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; - private static final String DATE_PATTERN = "yyyy-MM-dd"; - - /** - * string转localdate - */ - @Bean - public Converter<String, LocalDate> localDateConverter() { - return new Converter<String, LocalDate>() { - @Override - public LocalDate convert(String source) { - if (source.trim().length() == 0) { - return null; - } - try { - return LocalDate.parse(source); - } catch (Exception e) { - return LocalDate.parse(source, DateTimeFormatter.ofPattern(DATE_PATTERN)); - } - } - }; - } - - /** - * string转localdatetime - */ - @Bean - public Converter<String, LocalDateTime> localDateTimeConverter() { - return new Converter<String, LocalDateTime>() { - @Override - public LocalDateTime convert(String source) { - if (source.trim().length() == 0) { - return null; - } - // 先尝试ISO格式: 2019-07-15T16:00:00 - try { - return LocalDateTime.parse(source); - } catch (Exception e) { - return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)); - } - } - }; - } - - /** - * 统一配置 - */ - @Bean - public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { - JavaTimeModule module = new JavaTimeModule(); - LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer); - return builder -> { - builder.simpleDateFormat(DATE_TIME_PATTERN); - builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_PATTERN))); - builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN))); - builder.modules(module); - }; - } -} diff --git a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/handler/MyMetaObjectHandler.java b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/handler/MyMetaObjectHandler.java new file mode 100644 index 0000000..73263ff --- /dev/null +++ b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/handler/MyMetaObjectHandler.java @@ -0,0 +1,44 @@ +package com.xinquan.common.security.handler; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.xinquan.common.security.utils.SecurityUtils; +import java.time.LocalDateTime; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; + +/** + * 自动填充处理类 + * + * @author mitao + * @date 2024-05-16 + */ +@Slf4j +public class MyMetaObjectHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + // 获取当前登录用户 + Long userId = SecurityUtils.getUserId(); + fillValue("createBy", userId.toString(), metaObject); + fillValue("createTime", LocalDateTime.now(), metaObject); + } + + @Override + public void updateFill(MetaObject metaObject) { + // 获取当前登录用户 + Long userId = SecurityUtils.getUserId(); + fillValue("updateBy", userId.toString(), metaObject); + fillValue("updateTime", LocalDateTime.now(), metaObject); + } + + private void fillValue(String fieldName, Object data, MetaObject metaObject) { + if (metaObject.hasSetter(fieldName)) { + // 值为空时设置默认值 + Object sidObj = getFieldValByName(fieldName, metaObject); + if (sidObj == null || "updateBy".equals(fieldName) || "updateTime".equals(fieldName)) { + setFieldValByName(fieldName, data, metaObject); + } + } + } +} + diff --git a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/service/TokenService.java b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/service/TokenService.java index c305f70..b36ae3e 100644 --- a/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/service/TokenService.java +++ b/xinquan-common/xinquan-common-security/src/main/java/com/xinquan/common/security/service/TokenService.java @@ -1,11 +1,5 @@ package com.xinquan.common.security.service; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import javax.servlet.http.HttpServletRequest; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import com.xinquan.common.core.constant.CacheConstants; import com.xinquan.common.core.constant.SecurityConstants; import com.xinquan.common.core.utils.JwtUtils; @@ -16,6 +10,13 @@ import com.xinquan.common.redis.service.RedisService; import com.xinquan.common.security.utils.SecurityUtils; import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * token验证处理 @@ -166,4 +167,36 @@ { return ACCESS_TOKEN + token; } + + public Map<String, Object> createToken4WXLoginUser(WXLoginUser wxLoginUser) { + LoginUser loginUser = new LoginUser(); + // Jwt存储信息 + Map<String, Object> claimsMap = new HashMap<String, Object>(); + // 接口返回信息 + Map<String, Object> rspMap = new HashMap<String, Object>(); + // 用户为空只返回openid + rspMap.put("cellPhone", ""); + rspMap.put("access_token", ""); + if (wxLoginUser.getSysUser() != null) { + loginUser.setSysUser(wxLoginUser.getSysUser()); + String token = IdUtils.fastUUID(); + Long userId = loginUser.getSysUser().getUserId(); + String userName = loginUser.getSysUser().getUserName(); + loginUser.setToken(token); + loginUser.setUserid(userId); + loginUser.setIpaddr(IpUtils.getIpAddr()); + refreshToken(loginUser); + claimsMap.put(SecurityConstants.USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); + if (StringUtils.isNotBlank(wxLoginUser.getCellPhone())) { + rspMap.put("cellPhone", wxLoginUser.getCellPhone()); + } else { + rspMap.put("cellPhone", ""); + } + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", expireTime); + } + return rspMap; + } } \ No newline at end of file diff --git a/xinquan-common/xinquan-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/xinquan-common/xinquan-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 93e01eb..1433457 100644 --- a/xinquan-common/xinquan-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/xinquan-common/xinquan-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -3,5 +3,5 @@ com.xinquan.common.security.aspect.PreAuthorizeAspect com.xinquan.common.security.aspect.InnerAuthAspect com.xinquan.common.security.handler.GlobalExceptionHandler +com.xinquan.common.security.handler.MyMetaObjectHandler com.xinquan.common.security.config.JacksonConfig -com.xinquan.common.security.config.LocalDateTimeSerializerConfig diff --git a/xinquan-gateway/src/main/java/com/xinquan/gateway/config/SwaggerProvider.java b/xinquan-gateway/src/main/java/com/xinquan/gateway/config/SwaggerProvider.java index cfb868e..9db6bec 100644 --- a/xinquan-gateway/src/main/java/com/xinquan/gateway/config/SwaggerProvider.java +++ b/xinquan-gateway/src/main/java/com/xinquan/gateway/config/SwaggerProvider.java @@ -56,6 +56,10 @@ .forEach(routeDefinition -> routeDefinition.getPredicates().stream() .filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName())) // .filter(predicateDefinition -> !"xinquan-auth".equalsIgnoreCase(routeDefinition.getId())) + .filter(predicateDefinition -> !"xinquan-gen".equalsIgnoreCase( + routeDefinition.getId())) + .filter(predicateDefinition -> !"xinquan-job".equalsIgnoreCase( + routeDefinition.getId())) .forEach(predicateDefinition -> resourceList .add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs() .get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", SWAGGER2URL))))); diff --git a/xinquan-modules/pom.xml b/xinquan-modules/pom.xml index 9eda2bc..80e7ed1 100644 --- a/xinquan-modules/pom.xml +++ b/xinquan-modules/pom.xml @@ -13,6 +13,11 @@ <module>xinquan-gen</module> <module>xinquan-job</module> <module>xinquan-file</module> + <module>xinquan-user</module> + <module>xinquan-meditation</module> + <module>xinquan-course</module> + <module>xinquan-order</module> + </modules> <artifactId>xinquan-modules</artifactId> diff --git a/xinquan-modules/xinquan-course/pom.xml b/xinquan-modules/xinquan-course/pom.xml index 0fa87ff..a7ab784 100644 --- a/xinquan-modules/xinquan-course/pom.xml +++ b/xinquan-modules/xinquan-course/pom.xml @@ -5,12 +5,11 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.xinquan</groupId> - <artifactId>xinquan</artifactId> + <artifactId>xinquan-modules</artifactId> <version>3.6.2</version> - <relativePath>../../pom.xml</relativePath> </parent> - <artifactId>xinquan-course</artifactId> + <artifactId>xinquan-modules-course</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> @@ -19,13 +18,6 @@ </properties> <dependencies> - - <!--system feign模块--> - <dependency> - <groupId>com.xinquan</groupId> - <artifactId>xinquan-api-system</artifactId> - <scope>compile</scope> - </dependency> <!--user feign模块--> <dependency> diff --git a/xinquan-modules/xinquan-file/pom.xml b/xinquan-modules/xinquan-file/pom.xml index 3e729ec..e27178c 100644 --- a/xinquan-modules/xinquan-file/pom.xml +++ b/xinquan-modules/xinquan-file/pom.xml @@ -65,7 +65,18 @@ <groupId>com.xinquan</groupId> <artifactId>xinquan-common-swagger</artifactId> </dependency> - + <!--华为云OBS--> + <dependency> + <groupId>com.huaweicloud</groupId> + <artifactId>esdk-obs-java</artifactId> + <version>3.19.5</version> + <exclusions> + <exclusion> + <artifactId>okio</artifactId> + <groupId>com.squareup.okio</groupId> + </exclusion> + </exclusions> + </dependency> </dependencies> <build> diff --git a/xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/controller/SysFileController.java b/xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/controller/SysFileController.java index 07ad8e6..d411d65 100644 --- a/xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/controller/SysFileController.java +++ b/xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/controller/SysFileController.java @@ -1,15 +1,17 @@ package com.xinquan.file.controller; +import com.xinquan.common.core.domain.R; +import com.xinquan.common.core.utils.file.FileUtils; +import com.xinquan.file.service.ISysFileService; +import com.xinquan.file.utils.ObsUploadUtil; +import com.xinquan.system.api.domain.SysFile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import com.xinquan.common.core.domain.R; -import com.xinquan.common.core.utils.file.FileUtils; -import com.xinquan.file.service.ISysFileService; -import com.xinquan.system.api.domain.SysFile; /** * 文件请求处理 @@ -45,4 +47,22 @@ return R.fail(e.getMessage()); } } + + /** + * 文件上传请求 + */ + @PostMapping("obs-upload") + public R<String> uploadOSS(@RequestPart("file") MultipartFile file) { + try { + // 上传并返回访问地址 + String fileName = file.getOriginalFilename(); + String prefix = fileName.substring(fileName.lastIndexOf(".")); + long fileSize = file.getSize(); + String url = ObsUploadUtil.obsUpload(file); + return R.ok(url); + } catch (Exception e) { + log.error("上传文件失败", e); + return R.fail(e.getMessage()); + } + } } \ No newline at end of file diff --git a/xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/utils/ObsUploadUtil.java b/xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/utils/ObsUploadUtil.java new file mode 100644 index 0000000..73e9f8e --- /dev/null +++ b/xinquan-modules/xinquan-file/src/main/java/com/xinquan/file/utils/ObsUploadUtil.java @@ -0,0 +1,77 @@ +package com.xinquan.file.utils; + +import com.obs.services.ObsClient; +import com.obs.services.model.ObjectMetadata; +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; +import org.springframework.web.multipart.MultipartFile; + +public class ObsUploadUtil { + + // OBS图片访问域名 TODO 修改正式参数 + public static String endPoint = "obs.cn-southwest-2.myhuaweicloud.com"; + public static String accessKeyId = "IZB26ZHC7C5MWIOH1TGE"; + public static String accessKeySecret = "y5PXhFMDOHiPH0nnQMz4gkvA63oqKAC621zXzOPk"; + public static String bucketName = "mimishejiao"; + public static String oss_domain = "https://mimishejiao.obs.cn-southwest-2.myhuaweicloud.com/"; + + // 创建ObsClient实例 + public static ObsClient obsClient = new ObsClient(accessKeyId, accessKeySecret, endPoint); + + public static String obsUpload(MultipartFile file) + throws IOException { + String fileName = ""; + if (file != null && !"".equals(file.getOriginalFilename()) + && file.getOriginalFilename() != null) { + InputStream content = file.getInputStream();// 获得指定文件的输入流 + ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata + meta.setContentLength(file.getSize()); // 必须设置ContentLength + String originalFilename = file.getOriginalFilename(); + fileName = + UUID.randomUUID().toString().replaceAll("-", "") + originalFilename.subSequence( + originalFilename.lastIndexOf("."), originalFilename.length()); + obsClient.putObject(bucketName, "xinquan/" + fileName, content, meta);// 上传Object. + if (fileName != null && !"".equals(fileName)) { + System.out.println(fileName); + fileName = oss_domain + "admin/" + fileName; + } + } + return fileName; + } + + /** + * 删除某个Object + * + * @param bucketUrl + * @return + */ + public static boolean deleteObject(String bucketUrl) { + try { + bucketUrl = bucketUrl.replace(oss_domain + "admin/", ""); + // 删除Object. + obsClient.deleteObject(bucketName, bucketUrl); + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + // ossClient.shutdown(); + } + return true; + } + +// public static void createBucket(String bucketName) +// { +// //初始化 OSSClient +//// ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret); +// +// // 新建一个Bucket +// Bucket bucket = ossClient.createBucket(bucketName); +// System.out.println(bucket.getName()); +// System.out.println(bucket.getCreationDate()); +// } +// +// public static void main(String[] args) { +// OssUploadUtil.createBucket("ssfdfsd"); +// } +} diff --git a/xinquan-modules/xinquan-gen/pom.xml b/xinquan-modules/xinquan-gen/pom.xml index 4ab26fc..7e5356e 100644 --- a/xinquan-modules/xinquan-gen/pom.xml +++ b/xinquan-modules/xinquan-gen/pom.xml @@ -88,25 +88,6 @@ <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> - <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core --> - <dependency> - <groupId>org.apache.velocity</groupId> - <artifactId>velocity-engine-core</artifactId> - <version>2.3</version> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.13.2</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>com.baomidou</groupId> - <artifactId>mybatis-plus-generator</artifactId> - <version>3.4.0</version> - <scope>test</scope> - </dependency> </dependencies> <build> diff --git a/xinquan-modules/xinquan-meditation/pom.xml b/xinquan-modules/xinquan-meditation/pom.xml index 4653ed5..8839b86 100644 --- a/xinquan-modules/xinquan-meditation/pom.xml +++ b/xinquan-modules/xinquan-meditation/pom.xml @@ -5,12 +5,11 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.xinquan</groupId> - <artifactId>xinquan</artifactId> + <artifactId>xinquan-modules</artifactId> <version>3.6.2</version> - <relativePath>../../pom.xml</relativePath> </parent> - <artifactId>xinquan-meditation</artifactId> + <artifactId>xinquan-modules-meditation</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> @@ -19,13 +18,6 @@ </properties> <dependencies> - - <!--system feign模块--> - <dependency> - <groupId>com.xinquan</groupId> - <artifactId>xinquan-api-system</artifactId> - <scope>compile</scope> - </dependency> <!--user feign模块--> <dependency> diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/HomeBackgroundMusicController.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicController.java similarity index 87% rename from xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/HomeBackgroundMusicController.java rename to xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicController.java index 683adad..e4f7092 100644 --- a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/HomeBackgroundMusicController.java +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicController.java @@ -1,8 +1,7 @@ -package com.xinquan.system.controller; +package com.xinquan.meditation.controller.client; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicUserController.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicUserController.java new file mode 100644 index 0000000..f964608 --- /dev/null +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/controller/client/HomeBackgroundMusicUserController.java @@ -0,0 +1,20 @@ +package com.xinquan.meditation.controller.client; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * <p> + * 首页背景音乐用户关系表 前端控制器 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@RestController +@RequestMapping("/meditation/home-background-music-user") +public class HomeBackgroundMusicUserController { + +} + diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/HomeBackgroundMusic.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusic.java similarity index 92% rename from xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/HomeBackgroundMusic.java rename to xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusic.java index 13ca592..58e1fa9 100644 --- a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/HomeBackgroundMusic.java +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusic.java @@ -1,10 +1,10 @@ -package com.xinquan.system.domain; +package com.xinquan.meditation.domain; -import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; -import com.xinquan.common.core.web.domain.BaseModel; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xinquan.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -27,7 +27,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty(value = "首页背景音乐id") - @TableId(value = "id", type = IdType.AUTO) + @TableId(value = "id", type = IdType.ASSIGN_ID) private Long id; @ApiModelProperty(value = "背景图片") diff --git a/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusicUser.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusicUser.java new file mode 100644 index 0000000..e0faa75 --- /dev/null +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/domain/HomeBackgroundMusicUser.java @@ -0,0 +1,42 @@ +package com.xinquan.meditation.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xinquan.common.core.web.domain.BaseModel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * 首页背景音乐用户关系表 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_home_background_music_user") +@ApiModel(value = "HomeBackgroundMusicUser对象", description = "首页背景音乐用户关系表") +public class HomeBackgroundMusicUser extends BaseModel { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "首页背景音乐用户关系id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + @ApiModelProperty(value = "用户id") + @TableField("app_user_id") + private Long appUserId; + + @ApiModelProperty(value = "首页音频id") + @TableField("home_background_music_id") + private Long homeBackgroundMusicId; + + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/mapper/HomeBackgroundMusicMapper.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicMapper.java similarity index 71% rename from xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/mapper/HomeBackgroundMusicMapper.java rename to xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicMapper.java index 5991001..3da3666 100644 --- a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/mapper/HomeBackgroundMusicMapper.java +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicMapper.java @@ -1,7 +1,7 @@ -package com.xinquan.system.mapper; +package com.xinquan.meditation.mapper; -import com.xinquan.system.domain.HomeBackgroundMusic; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xinquan.meditation.domain.HomeBackgroundMusic; /** * <p> diff --git a/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicUserMapper.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicUserMapper.java new file mode 100644 index 0000000..b0be31b --- /dev/null +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/mapper/HomeBackgroundMusicUserMapper.java @@ -0,0 +1,16 @@ +package com.xinquan.meditation.mapper; + +import com.xinquan.meditation.domain.HomeBackgroundMusicUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * 首页背景音乐用户关系表 Mapper 接口 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface HomeBackgroundMusicUserMapper extends BaseMapper<HomeBackgroundMusicUser> { + +} diff --git a/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/HomeBackgroundMusicUserService.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/HomeBackgroundMusicUserService.java new file mode 100644 index 0000000..ffbdc74 --- /dev/null +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/HomeBackgroundMusicUserService.java @@ -0,0 +1,16 @@ +package com.xinquan.meditation.service; + +import com.xinquan.meditation.domain.HomeBackgroundMusicUser; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 首页背景音乐用户关系表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface HomeBackgroundMusicUserService extends IService<HomeBackgroundMusicUser> { + +} diff --git a/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/impl/HomeBackgroundMusicUserServiceImpl.java b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/impl/HomeBackgroundMusicUserServiceImpl.java new file mode 100644 index 0000000..28d27fc --- /dev/null +++ b/xinquan-modules/xinquan-meditation/src/main/java/com/xinquan/meditation/service/impl/HomeBackgroundMusicUserServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.meditation.service.impl; + +import com.xinquan.meditation.domain.HomeBackgroundMusicUser; +import com.xinquan.meditation.mapper.HomeBackgroundMusicUserMapper; +import com.xinquan.meditation.service.HomeBackgroundMusicUserService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 首页背景音乐用户关系表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class HomeBackgroundMusicUserServiceImpl extends ServiceImpl<HomeBackgroundMusicUserMapper, HomeBackgroundMusicUser> implements HomeBackgroundMusicUserService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/HomeBackgroundMusicMapper.xml b/xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicMapper.xml similarity index 84% rename from xinquan-modules/xinquan-system/src/main/resources/mapper/system/HomeBackgroundMusicMapper.xml rename to xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicMapper.xml index f3ae0ad..61f8292 100644 --- a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/HomeBackgroundMusicMapper.xml +++ b/xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicMapper.xml @@ -1,9 +1,9 @@ <?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.xinquan.system.mapper.HomeBackgroundMusicMapper"> +<mapper namespace="com.xinquan.meditation.mapper.HomeBackgroundMusicMapper"> <!-- 通用查询映射结果 --> - <resultMap id="BaseResultMap" type="com.xinquan.system.domain.HomeBackgroundMusic"> + <resultMap id="BaseResultMap" type="com.xinquan.meditation.domain.HomeBackgroundMusic"> <id column="id" property="id" /> <result column="del_flag" property="delFlag" /> <result column="create_by" property="createBy" /> diff --git a/xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicUserMapper.xml b/xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicUserMapper.xml new file mode 100644 index 0000000..1aaea91 --- /dev/null +++ b/xinquan-modules/xinquan-meditation/src/main/resources/mapper/meditation/HomeBackgroundMusicUserMapper.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xinquan.meditation.mapper.HomeBackgroundMusicUserMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.xinquan.meditation.domain.HomeBackgroundMusicUser"> + <id column="id" property="id"/> + <result column="app_user_id" property="appUserId"/> + <result column="home_background_music_id" property="homeBackgroundMusicId"/> + </resultMap> + + <!-- 通用查询结果列 --> + <sql id="Base_Column_List"> + id, app_user_id, home_background_music_id + </sql> + +</mapper> diff --git a/xinquan-modules/xinquan-order/pom.xml b/xinquan-modules/xinquan-order/pom.xml index e82b56c..9ac2e80 100644 --- a/xinquan-modules/xinquan-order/pom.xml +++ b/xinquan-modules/xinquan-order/pom.xml @@ -5,12 +5,11 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.xinquan</groupId> - <artifactId>xinquan</artifactId> + <artifactId>xinquan-modules</artifactId> <version>3.6.2</version> - <relativePath>../../pom.xml</relativePath> </parent> - <artifactId>xinquan-order</artifactId> + <artifactId>xinquan-modules-order</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> @@ -19,13 +18,6 @@ </properties> <dependencies> - - <!--system feign模块--> - <dependency> - <groupId>com.xinquan</groupId> - <artifactId>xinquan-api-system</artifactId> - <scope>compile</scope> - </dependency> <!--user feign模块--> <dependency> diff --git a/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/OrderPaymentRecordService.java b/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/OrderPaymentRecordService.java index 298b781..d04feaf 100644 --- a/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/OrderPaymentRecordService.java +++ b/xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/service/OrderPaymentRecordService.java @@ -1,7 +1,7 @@ package com.xinquan.order.service; -import com.xinquan.order.domain.OrderPaymentRecord; import com.baomidou.mybatisplus.extension.service.IService; +import com.xinquan.order.domain.OrderPaymentRecord; /** * <p> diff --git a/xinquan-modules/xinquan-system/pom.xml b/xinquan-modules/xinquan-system/pom.xml index 1498f24..86eae5d 100644 --- a/xinquan-modules/xinquan-system/pom.xml +++ b/xinquan-modules/xinquan-system/pom.xml @@ -143,6 +143,11 @@ <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> </dependency>--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/client/PublicController.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/client/PublicController.java new file mode 100644 index 0000000..a66ec85 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/controller/client/PublicController.java @@ -0,0 +1,38 @@ +package com.xinquan.system.controller.client; + +import com.xinquan.common.core.web.domain.AjaxResult; +import com.xinquan.system.service.PublicService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author mitao + * @date 2024/8/23 + */ +@Slf4j +@Api(tags = {"公共接口"}) +@RestController +@RequestMapping("/public") +@RequiredArgsConstructor +public class PublicController { + + private final PublicService publicService; + + @ApiOperation(value = "获取用户协议、隐私协议、关于心泉、新手冥想指南、课程/冥想音频购买协议") + @GetMapping("/getContent") + @ApiImplicitParams({ + @ApiImplicitParam(name = "key", value = "用户内容 1=用户协议 2=隐私协议 3=关于心泉 4=新手冥想指南 5=课程/冥想音频购买协议", + required = true, type = "Integer", paramType = "query")}) + public AjaxResult getContent( + @RequestParam(value = "key", required = true) Integer key) { + return AjaxResult.success(publicService.getContent(key)); + } +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/TreeLevelSetting.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/TreeLevelSetting.java index e0da597..eed4d18 100644 --- a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/TreeLevelSetting.java +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/TreeLevelSetting.java @@ -1,10 +1,10 @@ package com.xinquan.system.domain; -import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; -import com.xinquan.common.core.web.domain.BaseModel; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xinquan.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -30,6 +30,10 @@ @TableId(value = "id", type = IdType.AUTO) private Long id; + @ApiModelProperty(value = "树苗等级类型 1=种子 2=发芽 3=幼苗 4=小树苗 5=中等树苗 6=小树 7=中树 8=大树 9=成熟的大树 10=参天大树") + @TableField("tree_level_type") + private Integer treeLevelType; + @ApiModelProperty(value = "树苗阶段") @TableField("level_name") private String levelName; diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/UserLevelSetting.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/UserLevelSetting.java index acac59a..78022f7 100644 --- a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/UserLevelSetting.java +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/UserLevelSetting.java @@ -1,10 +1,10 @@ package com.xinquan.system.domain; -import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; -import com.xinquan.common.core.web.domain.BaseModel; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xinquan.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -30,9 +30,9 @@ @TableId(value = "id", type = IdType.AUTO) private Long id; - @ApiModelProperty(value = "树苗设置id") - @TableField("tree_level_setting_id") - private Integer treeLevelSettingId; + @ApiModelProperty(value = "树苗等级类型 1=种子 2=发芽 3=幼苗 4=小树苗 5=中等树苗 6=小树 7=中树 8=大树 9=成熟的大树 10=参天大树") + @TableField("tree_level_type") + private Integer treeLevelType; @ApiModelProperty(value = "等级图标") @TableField("level_icon") diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/vo/ContentSettingVO.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/vo/ContentSettingVO.java new file mode 100644 index 0000000..c170090 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/domain/vo/ContentSettingVO.java @@ -0,0 +1,23 @@ +package com.xinquan.system.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +@ApiModel(value = "ContentSettingVO对象", description = "内容设置视图对象") +public class ContentSettingVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "内容id") + private Long id; + + @ApiModelProperty(value = "内容类型 1=用户协议 2=隐私协议 3=关于心泉 4= 新手冥想指南 5=课程/冥想音频购买协议") + private Integer contentType; + + @ApiModelProperty(value = "内容") + private String content; + +} \ No newline at end of file diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/BannerService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/BannerService.java new file mode 100644 index 0000000..250f87f --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/BannerService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.Banner; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 用户信息表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface BannerService extends IService<Banner> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CommonQuestionService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CommonQuestionService.java new file mode 100644 index 0000000..4ca1db8 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CommonQuestionService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.CommonQuestion; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 常见问题表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface CommonQuestionService extends IService<CommonQuestion> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/ContentSettingService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/ContentSettingService.java new file mode 100644 index 0000000..97020d2 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/ContentSettingService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.ContentSetting; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 内容设置表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface ContentSettingService extends IService<ContentSetting> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CustomConfigService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CustomConfigService.java new file mode 100644 index 0000000..c6d1388 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/CustomConfigService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.CustomConfig; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 系统配置 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface CustomConfigService extends IService<CustomConfig> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/HotWordsService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/HotWordsService.java new file mode 100644 index 0000000..c11a333 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/HotWordsService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.HotWords; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 热词表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface HotWordsService extends IService<HotWords> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/PublicService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/PublicService.java new file mode 100644 index 0000000..4eedfae --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/PublicService.java @@ -0,0 +1,34 @@ +package com.xinquan.system.service; + +import com.xinquan.common.core.utils.page.BeanUtils; +import com.xinquan.system.domain.ContentSetting; +import com.xinquan.system.domain.vo.ContentSettingVO; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author mitao + * @date 2024/8/23 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PublicService { + + private final ContentSettingService contentSettingService; + + /** + * 根据key获取内容 + * + * @param key + * @return + */ + public ContentSettingVO getContent(Integer key) { + Optional<ContentSetting> contentSetting = contentSettingService.lambdaQuery() + .eq(ContentSetting::getContentType, key).oneOpt(); + return contentSetting.map(setting -> BeanUtils.copyBean(setting, ContentSettingVO.class)) + .orElse(null); + } +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/TreeLevelSettingService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/TreeLevelSettingService.java new file mode 100644 index 0000000..e993a50 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/TreeLevelSettingService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.TreeLevelSetting; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 树苗音频表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface TreeLevelSettingService extends IService<TreeLevelSetting> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/UserLevelSettingService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/UserLevelSettingService.java new file mode 100644 index 0000000..26da795 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/UserLevelSettingService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.UserLevelSetting; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 用户等级表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface UserLevelSettingService extends IService<UserLevelSetting> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VersionService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VersionService.java new file mode 100644 index 0000000..b48ccba --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VersionService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.Version; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 版本表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface VersionService extends IService<Version> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VipSettingService.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VipSettingService.java new file mode 100644 index 0000000..2b2c80e --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/VipSettingService.java @@ -0,0 +1,16 @@ +package com.xinquan.system.service; + +import com.xinquan.system.domain.VipSetting; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 会员设置表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +public interface VipSettingService extends IService<VipSetting> { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/BannerServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/BannerServiceImpl.java new file mode 100644 index 0000000..a537def --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/BannerServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.Banner; +import com.xinquan.system.mapper.BannerMapper; +import com.xinquan.system.service.BannerService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 用户信息表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> implements BannerService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CommonQuestionServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CommonQuestionServiceImpl.java new file mode 100644 index 0000000..de2b43f --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CommonQuestionServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.CommonQuestion; +import com.xinquan.system.mapper.CommonQuestionMapper; +import com.xinquan.system.service.CommonQuestionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 常见问题表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class CommonQuestionServiceImpl extends ServiceImpl<CommonQuestionMapper, CommonQuestion> implements CommonQuestionService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/ContentSettingServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/ContentSettingServiceImpl.java new file mode 100644 index 0000000..b5aab80 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/ContentSettingServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.ContentSetting; +import com.xinquan.system.mapper.ContentSettingMapper; +import com.xinquan.system.service.ContentSettingService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 内容设置表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class ContentSettingServiceImpl extends ServiceImpl<ContentSettingMapper, ContentSetting> implements ContentSettingService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CustomConfigServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CustomConfigServiceImpl.java new file mode 100644 index 0000000..c0877cc --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/CustomConfigServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.CustomConfig; +import com.xinquan.system.mapper.CustomConfigMapper; +import com.xinquan.system.service.CustomConfigService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 系统配置 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class CustomConfigServiceImpl extends ServiceImpl<CustomConfigMapper, CustomConfig> implements CustomConfigService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/HotWordsServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/HotWordsServiceImpl.java new file mode 100644 index 0000000..c394f6f --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/HotWordsServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.HotWords; +import com.xinquan.system.mapper.HotWordsMapper; +import com.xinquan.system.service.HotWordsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 热词表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class HotWordsServiceImpl extends ServiceImpl<HotWordsMapper, HotWords> implements HotWordsService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/TreeLevelSettingServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/TreeLevelSettingServiceImpl.java new file mode 100644 index 0000000..86a05df --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/TreeLevelSettingServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.TreeLevelSetting; +import com.xinquan.system.mapper.TreeLevelSettingMapper; +import com.xinquan.system.service.TreeLevelSettingService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 树苗音频表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class TreeLevelSettingServiceImpl extends ServiceImpl<TreeLevelSettingMapper, TreeLevelSetting> implements TreeLevelSettingService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/UserLevelSettingServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/UserLevelSettingServiceImpl.java new file mode 100644 index 0000000..8391ff1 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/UserLevelSettingServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.UserLevelSetting; +import com.xinquan.system.mapper.UserLevelSettingMapper; +import com.xinquan.system.service.UserLevelSettingService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 用户等级表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class UserLevelSettingServiceImpl extends ServiceImpl<UserLevelSettingMapper, UserLevelSetting> implements UserLevelSettingService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VersionServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VersionServiceImpl.java new file mode 100644 index 0000000..679da4a --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VersionServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.Version; +import com.xinquan.system.mapper.VersionMapper; +import com.xinquan.system.service.VersionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 版本表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class VersionServiceImpl extends ServiceImpl<VersionMapper, Version> implements VersionService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VipSettingServiceImpl.java b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VipSettingServiceImpl.java new file mode 100644 index 0000000..ebf5b45 --- /dev/null +++ b/xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/VipSettingServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.system.service.impl; + +import com.xinquan.system.domain.VipSetting; +import com.xinquan.system.mapper.VipSettingMapper; +import com.xinquan.system.service.VipSettingService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 会员设置表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-23 + */ +@Service +public class VipSettingServiceImpl extends ServiceImpl<VipSettingMapper, VipSetting> implements VipSettingService { + +} diff --git a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/TreeLevelSettingMapper.xml b/xinquan-modules/xinquan-system/src/main/resources/mapper/system/TreeLevelSettingMapper.xml index 092d4db..d4a1def 100644 --- a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/TreeLevelSettingMapper.xml +++ b/xinquan-modules/xinquan-system/src/main/resources/mapper/system/TreeLevelSettingMapper.xml @@ -10,6 +10,7 @@ <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> + <result column="tree_level_type" property="treeLevelType"/> <result column="level_name" property="levelName" /> <result column="growth_value" property="growthValue" /> <result column="grow_up_music" property="growUpMusic" /> diff --git a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/UserLevelSettingMapper.xml b/xinquan-modules/xinquan-system/src/main/resources/mapper/system/UserLevelSettingMapper.xml index f4bfb0d..f0e3b46 100644 --- a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/UserLevelSettingMapper.xml +++ b/xinquan-modules/xinquan-system/src/main/resources/mapper/system/UserLevelSettingMapper.xml @@ -10,7 +10,7 @@ <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> - <result column="tree_level_setting_id" property="treeLevelSettingId" /> + <result column="tree_level_type" property="treeLevelType"/> <result column="level_icon" property="levelIcon" /> <result column="level_name" property="levelName" /> <result column="growth_value" property="growthValue" /> diff --git a/xinquan-modules/xinquan-user/pom.xml b/xinquan-modules/xinquan-user/pom.xml index 97fe2d3..ed9d8fc 100644 --- a/xinquan-modules/xinquan-user/pom.xml +++ b/xinquan-modules/xinquan-user/pom.xml @@ -5,12 +5,11 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.xinquan</groupId> - <artifactId>xinquan</artifactId> + <artifactId>xinquan-modules</artifactId> <version>3.6.2</version> - <relativePath>../../pom.xml</relativePath> </parent> - <artifactId>xinquan-user</artifactId> + <artifactId>xinquan-modules-user</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> @@ -19,12 +18,6 @@ </properties> <dependencies> - <!--system feign模块--> - <dependency> - <groupId>com.xinquan</groupId> - <artifactId>xinquan-api-system</artifactId> - <scope>compile</scope> - </dependency> <!--user feign模块--> <dependency> @@ -117,6 +110,7 @@ <!-- 引入Druid依赖,阿里巴巴所提供的数据源 --> <dependency> + <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserQuestionController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserQuestionController.java new file mode 100644 index 0000000..7a62970 --- /dev/null +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserQuestionController.java @@ -0,0 +1,20 @@ +package com.xinquan.user.controller.client; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * <p> + * 用户计划引导页问题记录表 前端控制器 + * </p> + * + * @author mitao + * @since 2024-08-24 + */ +@RestController +@RequestMapping("/client/user/app-user-question") +public class ClientAppUserQuestionController { + +} + diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/inner/InnerAppUserController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/inner/InnerAppUserController.java index d55a04e..34b057a 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/inner/InnerAppUserController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/inner/InnerAppUserController.java @@ -2,14 +2,22 @@ import com.xinquan.common.core.domain.R; import com.xinquan.common.security.annotation.InnerAuth; +import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppVerifyCellPhoneBody; +import com.xinquan.system.api.model.AppWXLoginBody; +import com.xinquan.system.api.model.AppleLoginUser; +import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; import com.xinquan.user.service.AppUserService; +import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -31,17 +39,67 @@ */ @InnerAuth @PostMapping("/getUserByCondition") - R<AppUser> getUserByCondition(@RequestBody AppUserDTO dto){ + R<Optional<AppUser>> getUserByCondition(@RequestBody AppUserDTO dto) { return R.ok(appUserService.getUserByCondition(dto)); } /** - * app用户注册 + * APP用户注册 * @param appUserDTO * @return */ + @InnerAuth @PostMapping("/registerAppUser") R<Boolean> registerAppUser(@RequestBody AppUserDTO appUserDTO){ return R.ok(appUserService.registerAppUser(appUserDTO)); } + + /** + * APP微信登录 + * + * @param body + * @return + */ + @InnerAuth + @PostMapping("/wxLogin") + R<WXLoginUser> wxLogin(@RequestBody AppWXLoginBody body) { + return R.ok(appUserService.wxLogin(body)); + } + + /** + * APP苹果登录 + * + * @param appleId + * @param source + * @return + */ + @InnerAuth + @PostMapping("/appleLogin") + R<AppleLoginUser> appleLogin(@RequestParam("appleId") String appleId) { + return R.ok(appUserService.appleLogin(appleId)); + } + + /** + * 验证码登录 + * + * @param body + * @return + */ + @InnerAuth + @PostMapping("/captchaLogin") + R<LoginUser> appCaptchaLogin(@RequestBody AppCaptchaBody body) { + return R.ok(appUserService.appCaptchaLogin(body)); + } + + /** + * 微信苹果登录验证手机号码操作 + * + * @param body + * @return + */ + @InnerAuth + @PostMapping("/verifyCellPhone") + R<WXLoginUser> verifyCellPhone(@RequestBody AppVerifyCellPhoneBody body) { + return R.ok(appUserService.verifyCellPhone(body)); + } } diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserBankController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserBankController.java index 7770bf3..d6dba1e 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserBankController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserBankController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserController.java index a7631a1..4c21f68 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserCourseController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserCourseController.java index da1af4b..4a2e1a3 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserCourseController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserCourseController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserEnergyRecordController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserEnergyRecordController.java index 6ff14bf..9aae452 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserEnergyRecordController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserEnergyRecordController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserMeditationController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserMeditationController.java index 7f9aec4..2ac3390 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserMeditationController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserMeditationController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTagController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTagController.java index 7066583..e7908d6 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTagController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTagController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTreeController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTreeController.java index 5489309..49c7198 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTreeController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserTreeController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWalletRecordController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWalletRecordController.java index 92ee57d..bf08f5c 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWalletRecordController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWalletRecordController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWithdrawController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWithdrawController.java index bd66a44..3bd9715 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWithdrawController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtAppUserWithdrawController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeController.java index 6ebabe3..2f69bcf 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeRedemptionRecordController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeRedemptionRecordController.java index 3c5b07c..76e5d22 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeRedemptionRecordController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtPrizeRedemptionRecordController.java @@ -1,8 +1,7 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtTagController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtTagController.java index 7cb5cd0..27e3cbb 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtTagController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/management/MgtTagController.java @@ -1,8 +1,9 @@ -package com.xinquan.controller; +package com.xinquan.user.controller.management; - +import com.xinquan.user.service.TagService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** @@ -13,9 +14,29 @@ * @author mitao * @since 2024-08-21 */ +@Api(value = "管理后台接口", tags = "管理后台接口") @RestController @RequestMapping("/mgt/tag") +@RequiredArgsConstructor public class MgtTagController { + private final TagService tagService; + +/* @ApiOperation(value = "添加用户标签") + @PostMapping("save") + public AjaxResult save(@RequestBody Tag tag) { + tagService.save(tag); + return AjaxResult.success(); + } + + @ApiOperation(value = "获取用户标签") + @GetMapping("/{id}") + @ApiParam(value = "标签id") + public AjaxResult save(@PathVariable("id") Long id) { + + Tag byId = tagService.getById(id); + return AjaxResult.success(byId); + }*/ + } diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserQuestion.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserQuestion.java new file mode 100644 index 0000000..fc5627e --- /dev/null +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserQuestion.java @@ -0,0 +1,41 @@ +package com.xinquan.user.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xinquan.common.core.web.domain.BaseModel; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * 用户计划引导页问题记录表 + * </p> + * + * @author mitao + * @since 2024-08-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_app_user_question") +@ApiModel(value="AppUserQuestion对象", description="用户计划引导页问题记录表") +public class AppUserQuestion extends BaseModel { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户计划引导问题记录表") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "1:您是否内心纠结敏感多疑?2:您是否辗转反侧彻夜难眠?3:您是否情绪失控暴躁易怒?4:您是否沉迷情感倍受伤害?5:您是否人生迷茫踌躇彷徨?6:其它补充说明") + @TableField("type") + private Integer type; + + @ApiModelProperty(value = "回答 1:是2:否3:偶尔有") + @TableField("answer") + private Integer answer; + + +} diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserTree.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserTree.java index 659e4c3..cb02369 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserTree.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/AppUserTree.java @@ -1,10 +1,10 @@ package com.xinquan.user.domain; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.xinquan.common.core.web.domain.BaseModel; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -34,9 +34,9 @@ @TableField("app_user_id") private Long appUserId; - @ApiModelProperty(value = "树苗等级id") - @TableField("tree_level_id") - private Integer treeLevelId; + @ApiModelProperty(value = "树苗等级类型 1=种子 2=发芽 3=幼苗 4=小树苗 5=中等树苗 6=小树 7=中树 8=大树 9=成熟的大树 10=参天大树") + @TableField("tree_level_type") + private Integer treeLevelType; @ApiModelProperty(value = "成长值") @TableField("growth_value") diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/Tag.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/Tag.java index 51cc6c2..9e17342 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/Tag.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/domain/Tag.java @@ -34,5 +34,4 @@ @TableField("tag_name") private String tagName; - } diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/mapper/AppUserQuestionMapper.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/mapper/AppUserQuestionMapper.java new file mode 100644 index 0000000..38f61d1 --- /dev/null +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/mapper/AppUserQuestionMapper.java @@ -0,0 +1,16 @@ +package com.xinquan.user.mapper; + +import com.xinquan.user.domain.AppUserQuestion; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * 用户计划引导页问题记录表 Mapper 接口 + * </p> + * + * @author mitao + * @since 2024-08-24 + */ +public interface AppUserQuestionMapper extends BaseMapper<AppUserQuestion> { + +} diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserQuestionService.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserQuestionService.java new file mode 100644 index 0000000..bfe63a4 --- /dev/null +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserQuestionService.java @@ -0,0 +1,16 @@ +package com.xinquan.user.service; + +import com.xinquan.user.domain.AppUserQuestion; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * 用户计划引导页问题记录表 服务类 + * </p> + * + * @author mitao + * @since 2024-08-24 + */ +public interface AppUserQuestionService extends IService<AppUserQuestion> { + +} diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java index 96dd552..31bd3b1 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java @@ -1,8 +1,15 @@ package com.xinquan.user.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppVerifyCellPhoneBody; +import com.xinquan.system.api.model.AppWXLoginBody; +import com.xinquan.system.api.model.AppleLoginUser; +import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; +import java.util.Optional; /** * <p> @@ -15,14 +22,49 @@ public interface AppUserService extends IService<AppUser> { /** * 获取用户信息 + * * @param dto * @return */ - AppUser getUserByCondition(AppUserDTO dto); + Optional<AppUser> getUserByCondition(AppUserDTO dto); + /** * app用户注册 * @param appUserDTO * @return */ Boolean registerAppUser(AppUserDTO appUserDTO); + + /** + * APP微信登录 + * + * @param body + * @return + */ + WXLoginUser wxLogin(AppWXLoginBody body); + + /** + * 苹果登录 + * + * @param appleId + * @param source + * @return + */ + AppleLoginUser appleLogin(String appleId); + + /** + * 验证码登录 + * + * @param body + * @return + */ + LoginUser appCaptchaLogin(AppCaptchaBody body); + + /** + * 微信苹果登录验证手机号码操作 + * + * @param body + * @return + */ + WXLoginUser verifyCellPhone(AppVerifyCellPhoneBody body); } diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserQuestionServiceImpl.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserQuestionServiceImpl.java new file mode 100644 index 0000000..c7ecee7 --- /dev/null +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserQuestionServiceImpl.java @@ -0,0 +1,20 @@ +package com.xinquan.user.service.impl; + +import com.xinquan.user.domain.AppUserQuestion; +import com.xinquan.user.mapper.AppUserQuestionMapper; +import com.xinquan.user.service.AppUserQuestionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * 用户计划引导页问题记录表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-08-24 + */ +@Service +public class AppUserQuestionServiceImpl extends ServiceImpl<AppUserQuestionMapper, AppUserQuestion> implements AppUserQuestionService { + +} diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java index ec96e38..46fd4ce 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java @@ -1,13 +1,39 @@ package com.xinquan.user.service.impl; +import cn.hutool.core.util.IdUtil; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xinquan.common.core.constant.Constants; +import com.xinquan.common.core.constant.SecurityConstants; +import com.xinquan.common.core.domain.R; +import com.xinquan.common.core.enums.AppUserStatusEnum; +import com.xinquan.common.core.enums.DisabledEnum; +import com.xinquan.common.core.enums.TreeLevelEnum; +import com.xinquan.common.core.exception.ServiceException; import com.xinquan.common.core.utils.page.BeanUtils; +import com.xinquan.common.security.utils.SecurityUtils; +import com.xinquan.system.api.RemoteUserService; +import com.xinquan.system.api.domain.SysUser; +import com.xinquan.system.api.feignClient.SysUserClient; +import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppVerifyCellPhoneBody; +import com.xinquan.system.api.model.AppWXLoginBody; +import com.xinquan.system.api.model.AppleLoginUser; +import com.xinquan.system.api.model.LoginUser; +import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; +import com.xinquan.user.domain.AppUserTree; import com.xinquan.user.mapper.AppUserMapper; import com.xinquan.user.service.AppUserService; +import com.xinquan.user.service.AppUserTreeService; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.Optional; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -18,20 +44,28 @@ * @since 2024-08-21 */ @Service +@RequiredArgsConstructor public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements AppUserService { + + private final SysUserClient sysUserClient; + private final RemoteUserService remoteUserService; + private final AppUserTreeService appUserTreeService; /** * 获取用户信息 + * * @param dto * @return */ @Override - public AppUser getUserByCondition(AppUserDTO dto) { - return this.lambdaQuery() + public Optional<AppUser> getUserByCondition(AppUserDTO dto) { + return this.lambdaQuery() + .eq(Objects.nonNull(dto.getId()), AppUser::getId, dto.getId()) .eq(StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId()) .eq(StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone, dto.getCellPhone()) .eq(StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId, - dto.getWxOpenId()).oneOpt().orElse(null); + dto.getWxOpenId()) + .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT.getCode()).oneOpt(); } /** @@ -44,4 +78,266 @@ AppUser appUser = BeanUtils.copyBean(appUserDTO, AppUser.class); return this.save(appUser); } + + /** + * APP微信登录 + * + * @param body + * @return + */ + @Override + public WXLoginUser wxLogin(AppWXLoginBody body) { + WXLoginUser wxLoginUser = new WXLoginUser(); + Optional<AppUser> optionalAppUser = this.getUserByCondition( + AppUserDTO.builder().wxOpenId(body.getWxOpenId()).build()); + // 存在账户,查询关联系统用户 + if (optionalAppUser.isPresent()) { + AppUser appUser = optionalAppUser.get(); + SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); + wxLoginUser.setSysUser(sysUser); + if (Objects.nonNull(sysUser.getUserName())) { + wxLoginUser.setBindStatus(1); + wxLoginUser.setCellPhone(appUser.getCellPhone()); + } + } else { + // 不存在账户,创建账户 + // 注册用户信息 + SysUser sysUser = new SysUser(); + sysUser.setNickName(body.getNickname()); + sysUser.setAvatar(body.getHeadImgUrl()); + + R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser, + SecurityConstants.INNER); + if (registerResult.getCode() == Constants.FAIL) { + throw new ServiceException(registerResult.getMsg()); + } + SysUser sysUserRes = registerResult.getData(); + AppUser appUser = new AppUser(); + appUser.setUserId(sysUserRes.getUserId()); + appUser.setWxOpenId(body.getWxOpenId()); + appUser.setNickname(body.getNickname()); + appUser.setAvatar(body.getHeadImgUrl()); + appUser.setGender(body.getSex()); + appUser.setBalance(BigDecimal.ZERO); + appUser.setSanskritFlag(DisabledEnum.NO.getCode()); + appUser.setBalance(BigDecimal.ZERO); + appUser.setIncome(BigDecimal.ZERO); + appUser.setTotalEnergyValue(0); + appUser.setRegisterTime(LocalDateTime.now()); + appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode()); + this.save(appUser); + // 初始化用户树苗 + initUserTree(appUser.getId()); + wxLoginUser.setSysUser(null); + wxLoginUser.setBindStatus(DisabledEnum.NO.getCode()); + } + return wxLoginUser; + } + + @Override + public AppleLoginUser appleLogin(String appleId) { + AppleLoginUser appleLoginUser = new AppleLoginUser(); + Optional<AppUser> optionalAppUser = this.getUserByCondition( + AppUserDTO.builder().appleId(appleId).build()); + // 存在账户,查询关联系统用户 + if (optionalAppUser.isPresent()) { + AppUser appUser = optionalAppUser.get(); + SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); + appleLoginUser.setSysUser(sysUser); + if (Objects.nonNull(sysUser.getUserName())) { + appleLoginUser.setBindStatus(1); + appleLoginUser.setCellPhone(appUser.getCellPhone()); + } + } else { + // 不存在账户,创建账户 + // 注册用户信息 + SysUser sysUser = new SysUser(); + String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6); + sysUser.setNickName(nickname); + sysUser.setAvatar("qwer"); + + R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser, + SecurityConstants.INNER); + if (registerResult.getCode() == Constants.FAIL) { + throw new ServiceException(registerResult.getMsg()); + } + SysUser sysUserRes = registerResult.getData(); + AppUser appUser = new AppUser(); + appUser.setUserId(sysUserRes.getUserId()); + appUser.setNickname(nickname); + appUser.setAvatar("qwer"); // TODO 待完善默认头像 + appUser.setBalance(BigDecimal.ZERO); + appUser.setSanskritFlag(DisabledEnum.NO.getCode()); + appUser.setBalance(BigDecimal.ZERO); + appUser.setIncome(BigDecimal.ZERO); + appUser.setTotalEnergyValue(0); + appUser.setRegisterTime(LocalDateTime.now()); + appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode()); + this.save(appUser); + // 初始化用户树苗 + initUserTree(appUser.getId()); + appleLoginUser.setSysUser(null); + appleLoginUser.setBindStatus(DisabledEnum.NO.getCode()); + } + + return appleLoginUser; + } + + /** + * 验证码登录 + * + * @param body + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public LoginUser appCaptchaLogin(AppCaptchaBody body) { + LoginUser loginUser = new LoginUser(); + Optional<AppUser> optionalAppUser = this.getUserByCondition( + AppUserDTO.builder().cellPhone(body.getCellPhone()).build()); + if (optionalAppUser.isPresent()) { + AppUser appUser = optionalAppUser.get(); + SysUser sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); + loginUser.setSysUser(sysUser); + } else { + // 注册用户信息 + SysUser sysUser = new SysUser(); + String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6); + sysUser.setNickName(nickname); + sysUser.setAvatar("qwer"); + sysUser.setUserName(body.getCellPhone()); + // 设置默认密码123456 + sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD)); + + R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser, + SecurityConstants.INNER); + if (registerResult.getCode() == Constants.FAIL) { + throw new ServiceException(registerResult.getMsg()); + } + SysUser sysUserRes = registerResult.getData(); + AppUser appUser = new AppUser(); + appUser.setUserId(sysUserRes.getUserId()); + appUser.setNickname(nickname); + appUser.setCellPhone(body.getCellPhone()); + appUser.setAvatar("qwer"); // TODO 待完善默认头像 + appUser.setBalance(BigDecimal.ZERO); + appUser.setSanskritFlag(DisabledEnum.NO.getCode()); + appUser.setBalance(BigDecimal.ZERO); + appUser.setIncome(BigDecimal.ZERO); + appUser.setTotalEnergyValue(0); + appUser.setRegisterTime(LocalDateTime.now()); + appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode()); + this.save(appUser); + // 初始化用户树苗 + initUserTree(appUser.getId()); + } + return loginUser; + } + + /** + * 初始化用户树苗 + * + * @param appUserId 用户id + */ + private void initUserTree(Long appUserId) { + AppUserTree appUserTree = new AppUserTree(); + appUserTree.setAppUserId(appUserId); + appUserTree.setTreeLevelType(TreeLevelEnum.SEED.getCode()); + appUserTree.setGrowthValue(0); + appUserTree.setSowAgain(2); + appUserTree.setCurrentEnergyValue(0); + appUserTreeService.save(appUserTree); + } + + /** + * 微信苹果登录验证手机号码操作 + * + * @param body + * @return + */ + @Override + public WXLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) { + Integer loginType = body.getLoginType(); + String wxOrAppleId = body.getWxOrAppleId(); + SysUser sysUser; + AppUser appUser; + // 先通过手机号查询用户,如果用户先使用手机号码登录过,那么就已经存在这个手机号码的用户了。 + Optional<AppUser> baseOptionalAppUser = this.getUserByCondition( + AppUserDTO.builder().cellPhone(body.getCellPhone()).build()); + // 如果存在 更新wxOpenId 或appleId + if (baseOptionalAppUser.isPresent()) { + appUser = baseOptionalAppUser.get(); + if (loginType.equals(1)) { + appUser.setWxOpenId(wxOrAppleId); + } else { + appUser.setAppleId(wxOrAppleId); + } + // 查询系统用户 + sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); + if (Objects.isNull(sysUser)) { + throw new ServiceException("系统用户不存在"); + } + } else { + Optional<AppUser> userOptional = getAppUserByThirdId(loginType, wxOrAppleId); + + if (loginType.equals(1)) { + // 微信登录 + handleUserNotPresent(userOptional, "该用户不存在,请重新进行微信授权登录"); + } else { + // 苹果登录 + handleUserNotPresent(userOptional, "该用户不存在,请重新进行苹果授权登录"); + } + appUser = userOptional.get(); + appUser.setCellPhone(body.getCellPhone()); + // 更新系统用户 + sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData(); + if (Objects.isNull(sysUser)) { + throw new ServiceException("系统用户不存在"); + } + sysUser.setUserName(body.getCellPhone()); + sysUser.setPassword( + SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD)); // 默认密码为123456 + sysUser.setPhonenumber(body.getCellPhone()); + sysUserClient.updateSysUser(sysUser); + } + // 更新用户信息 + this.updateById(appUser); + if (loginType.equals(1)) { + // 微信登录 + WXLoginUser wxLoginUser = new WXLoginUser(); + wxLoginUser.setBindStatus(1); + wxLoginUser.setCellPhone(body.getCellPhone()); + wxLoginUser.setSysUser(sysUser); + return wxLoginUser; + } else { + // 苹果登录 + AppleLoginUser appleLoginUser = new AppleLoginUser(); + appleLoginUser.setBindStatus(1); + appleLoginUser.setCellPhone(body.getCellPhone()); + appleLoginUser.setSysUser(sysUser); + return appleLoginUser; + } + } + + // 定义一个方法来处理用户不存在的情况 + private void handleUserNotPresent(Optional<AppUser> userOptional, String errorMessage) { + if (!userOptional.isPresent()) { + throw new ServiceException(errorMessage); + } + } + + /** + * 根据第三方id获取未注销用户 + * + * @param loginType 登录类型 1=微信 2=苹果 + * @param wxOrAppleId 微信openid或苹果appleId + * @return Optional<AppUser> + */ + private Optional<AppUser> getAppUserByThirdId(Integer loginType, String wxOrAppleId) { + return this.lambdaQuery() + .eq(loginType.equals(1), AppUser::getWxOpenId, wxOrAppleId) + .eq(loginType.equals(2), AppUser::getAppleId, wxOrAppleId) + .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT) + .oneOpt(); + } } diff --git a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/HomeBackgroundMusicMapper.xml b/xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserQuestionMapper.xml similarity index 65% copy from xinquan-modules/xinquan-system/src/main/resources/mapper/system/HomeBackgroundMusicMapper.xml copy to xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserQuestionMapper.xml index f3ae0ad..9ac78ec 100644 --- a/xinquan-modules/xinquan-system/src/main/resources/mapper/system/HomeBackgroundMusicMapper.xml +++ b/xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserQuestionMapper.xml @@ -1,18 +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.xinquan.system.mapper.HomeBackgroundMusicMapper"> +<mapper namespace="com.xinquan.user.mapper.AppUserQuestionMapper"> <!-- 通用查询映射结果 --> - <resultMap id="BaseResultMap" type="com.xinquan.system.domain.HomeBackgroundMusic"> + <resultMap id="BaseResultMap" type="com.xinquan.user.domain.AppUserQuestion"> <id column="id" property="id" /> <result column="del_flag" property="delFlag" /> <result column="create_by" property="createBy" /> <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> - <result column="image_url" property="imageUrl" /> - <result column="audio_file" property="audioFile" /> - <result column="sort_num" property="sortNum" /> + <result column="type" property="type" /> + <result column="answer" property="answer" /> </resultMap> <!-- 通用查询结果列 --> @@ -22,7 +21,7 @@ create_time, update_by, update_time, - id, image_url, audio_file, sort_num + id, type, answer </sql> </mapper> diff --git a/xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserTreeMapper.xml b/xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserTreeMapper.xml index fc42269..144edf5 100644 --- a/xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserTreeMapper.xml +++ b/xinquan-modules/xinquan-user/src/main/resources/mapper/user/AppUserTreeMapper.xml @@ -11,7 +11,7 @@ <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> <result column="app_user_id" property="appUserId" /> - <result column="tree_level_id" property="treeLevelId" /> + <result column="tree_level_type" property="treeLevelType"/> <result column="growth_value" property="growthValue" /> <result column="current_energy_value" property="currentEnergyValue" /> <result column="sow_again" property="sowAgain" /> -- Gitblit v1.7.1