diff --git a/sop-openapi/pom.xml b/sop-openapi/pom.xml index f035b864..39158e49 100644 --- a/sop-openapi/pom.xml +++ b/sop-openapi/pom.xml @@ -6,7 +6,7 @@ com.gitee.sop sop-parent - 4.0.3-SNAPSHOT + 4.1.0-SNAPSHOT ../pom.xml com.gitee.sop.openapi @@ -17,7 +17,7 @@ com.gitee.sop sop-service-common - 4.0.3-SNAPSHOT + 4.1.0-SNAPSHOT @@ -87,6 +87,11 @@ 1.18.4 provided + + + org.springframework.boot + spring-boot-starter-data-jpa + diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/BaseEntity.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/BaseEntity.java new file mode 100644 index 00000000..86d61b0d --- /dev/null +++ b/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/BaseEntity.java @@ -0,0 +1,61 @@ +package com.gitee.sop.openapi.entity; + +import com.google.common.base.MoreObjects; +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; + +/*** + * + * @author wangping created on 2020/11/4 18:59 + */ +@Data +@MappedSuperclass +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public abstract class BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "gmt_create", nullable = false) + private Date gmtCreate; + + @Column(name = "gmt_modified") + private Date gmtModified; + + @PrePersist + protected void prePersist() { + if (this.gmtCreate == null) { + gmtCreate = new Date(); + } + if (this.gmtModified == null) { + gmtModified = new Date(); + } + } + + @PreUpdate + protected void preUpdate() { + this.gmtModified = new Date(); + } + + @PreRemove + protected void preRemove() { + this.gmtModified = new Date(); + } + + protected MoreObjects.ToStringHelper toStringHelper() { + return MoreObjects.toStringHelper(this) + .omitNullValues() + .add("id", id) + .add("gmtCreate", gmtCreate) + .add("gmtModified", gmtModified); + } + + @Override + public String toString() { + return toStringHelper().toString(); + } +} diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvAuthTokenEntity.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvAuthTokenEntity.java index 2fae85fa..2058f25b 100644 --- a/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvAuthTokenEntity.java +++ b/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvAuthTokenEntity.java @@ -1,11 +1,9 @@ package com.gitee.sop.openapi.entity; import lombok.Data; -import org.springframework.data.annotation.Id; import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; +import javax.persistence.Entity; import javax.persistence.Table; /*** @@ -14,30 +12,31 @@ import javax.persistence.Table; */ @Data +@Entity @Table(name = "isv_auth_token") -public class IsvAuthTokenEntity { - - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - /** 数据库字段:id */ - private Long id; +public class IsvAuthTokenEntity extends BaseEntity { /** appKey, 数据库字段:app_key */ + @Column(name = "app_key") private String appKey; /** userId, 数据库字段:user_id */ + @Column(name = "user_id") private Long userId; /** 1启用,2禁用, 数据库字段:status */ - private Byte status; + @Column(name = "status", columnDefinition = "Bit default '1'") + private Boolean status = true; /** appAuthCode 数据库字段:app_auth_code */ + @Column(name = "app_auth_code") private String appAuthCode; /** appAuthToken 数据库字段:app_auth_token */ + @Column(name = "app_auth_token") private String appAuthToken; /** appRefreshToken 数据库字段:app_refresh_token */ + @Column(name = "app_refresh_token") private String appRefreshToken; } diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvInfoEntity.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvInfoEntity.java index a20d384a..81eb2761 100644 --- a/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvInfoEntity.java +++ b/sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvInfoEntity.java @@ -1,11 +1,9 @@ package com.gitee.sop.openapi.entity; import lombok.Data; -import org.springframework.data.annotation.Id; import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; +import javax.persistence.Entity; import javax.persistence.Table; /*** @@ -13,18 +11,23 @@ import javax.persistence.Table; * @author wangping created on 2020/11/2 16:22 */ @Data +@Entity @Table(name = "isv_info") -public class IsvInfoEntity { - - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - /** 数据库字段:id */ - private Long id; +public class IsvInfoEntity extends BaseEntity { /** appKey, 数据库字段:app_key */ + @Column(name = "app_key") private String appKey; /** 1启用,2禁用, 数据库字段:status */ + @Column(name = "status") private Byte status; + + /** 1:RSA2,2:MD5 */ + @Column(name = "sign_type") + private Byte signType; + + @Column(name = "remark") + private String remark; + } diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvAuthTokenMapper.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvAuthTokenMapper.java deleted file mode 100644 index eda698cf..00000000 --- a/sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvAuthTokenMapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.gitee.sop.openapi.mapper; - -import com.gitee.fastmybatis.core.mapper.CrudMapper; -import com.gitee.sop.openapi.entity.IsvAuthTokenEntity; - -/*** - * - * @author wangping created on 2020/11/2 16:59 - */ -public interface IsvAuthTokenMapper extends CrudMapper { -} diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvInfoMapper.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvInfoMapper.java deleted file mode 100644 index 46bc108d..00000000 --- a/sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvInfoMapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.gitee.sop.openapi.mapper; - -import com.gitee.fastmybatis.core.mapper.CrudMapper; -import com.gitee.sop.openapi.entity.IsvInfoEntity; - -/*** - * - * @author wangping created on 2020/11/2 15:52 - */ -public interface IsvInfoMapper extends CrudMapper { -} diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvAuthTokenRepository.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvAuthTokenRepository.java new file mode 100644 index 00000000..534b806f --- /dev/null +++ b/sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvAuthTokenRepository.java @@ -0,0 +1,17 @@ +package com.gitee.sop.openapi.repository; + +import com.gitee.sop.openapi.entity.IsvAuthTokenEntity; +import org.springframework.data.repository.PagingAndSortingRepository; + +/*** + * + * @author wangping created on 2020/11/4 19:12 + */ +public interface IsvAuthTokenRepository extends PagingAndSortingRepository { + + IsvAuthTokenEntity findFirstByAppKeyAndUserIdAndStatusTrue(String appKey, Long userId); + + IsvAuthTokenEntity findFirstByUserIdAndStatusTrue(Long userId); + + IsvAuthTokenEntity findFirstByAppAuthCode(String appAuthCode); +} diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvInfoRepository.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvInfoRepository.java new file mode 100644 index 00000000..218915b2 --- /dev/null +++ b/sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvInfoRepository.java @@ -0,0 +1,14 @@ +package com.gitee.sop.openapi.repository; + +import com.gitee.sop.openapi.entity.IsvInfoEntity; +import org.springframework.data.repository.PagingAndSortingRepository; + +/*** + * + * @author wangping created on 2020/11/4 19:11 + */ +public interface IsvInfoRepository extends PagingAndSortingRepository { + + IsvInfoEntity findFirstByAppKey(String appKey); + +} diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthCodeService.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthCodeService.java index b904028c..1daa402e 100644 --- a/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthCodeService.java +++ b/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthCodeService.java @@ -5,9 +5,9 @@ import com.gitee.fastmybatis.core.query.Query; import com.gitee.sop.openapi.config.RedisOperator; import com.gitee.sop.openapi.entity.IsvAuthTokenEntity; import com.gitee.sop.openapi.entity.IsvInfoEntity; -import com.gitee.sop.openapi.mapper.IsvAuthTokenMapper; -import com.gitee.sop.openapi.mapper.IsvInfoMapper; import com.gitee.sop.openapi.po.AuthCodePo; +import com.gitee.sop.openapi.repository.IsvAuthTokenRepository; +import com.gitee.sop.openapi.repository.IsvInfoRepository; import com.gitee.sop.openapi.vo.AuthCodeVo; import com.gitee.sop.openapi.util.MD5GeneratorUtil; import com.gitee.sop.openapi.util.RedisKeyUtil; @@ -24,15 +24,15 @@ import org.springframework.transaction.annotation.Transactional; @Service public class AuthCodeService implements AuthService { - private final IsvInfoMapper isvInfoMapper; - private final IsvAuthTokenMapper isvAuthTokenMapper; + private final IsvInfoRepository isvInfoRepository; + private final IsvAuthTokenRepository isvAuthTokenRepository; private final RedisOperator redisOperator; - public AuthCodeService(final IsvInfoMapper isvInfoMapper, - final IsvAuthTokenMapper isvAuthTokenMapper, + public AuthCodeService(final IsvInfoRepository isvInfoRepository, + final IsvAuthTokenRepository isvAuthTokenRepository, final RedisOperator redisOperator) { - this.isvInfoMapper = isvInfoMapper; - this.isvAuthTokenMapper = isvAuthTokenMapper; + this.isvInfoRepository = isvInfoRepository; + this.isvAuthTokenRepository = isvAuthTokenRepository; this.redisOperator = redisOperator; } @@ -40,7 +40,7 @@ public class AuthCodeService implements AuthService { @Transactional public AuthCodeVo getCode(AuthCodePo authCodePo) { - IsvInfoEntity isvInfo = isvInfoMapper.getByColumn("app_key", authCodePo.getAppId()); + IsvInfoEntity isvInfo = isvInfoRepository.findFirstByAppKey(authCodePo.getAppId()); if (isvInfo == null || isvInfo.getStatus().intValue() == FORBIDDEN) { log.error("appId已禁用:{}", authCodePo.getAppId()); throw new ServiceException("应用ID未申请或已被禁用"); @@ -48,11 +48,7 @@ public class AuthCodeService implements AuthService { String authCode = MD5GeneratorUtil.generateValue(); - Query query = new Query() - .eq("app_key", authCodePo.getAppId()) - .eq("user_id", authCodePo.getUserId()) - .eq("status", ENABLE_TOKEN); - IsvAuthTokenEntity authTokenEntity = isvAuthTokenMapper.getByQuery(query); + IsvAuthTokenEntity authTokenEntity = isvAuthTokenRepository.findFirstByAppKeyAndUserIdAndStatusTrue(authCodePo.getAppId(), authCodePo.getUserId()); AuthCodeVo authCodeVo = new AuthCodeVo(); authCodeVo.setCode(authCode); if (authTokenEntity == null) { @@ -61,11 +57,9 @@ public class AuthCodeService implements AuthService { authTokenEntity.setAppAuthCode(authCode); authTokenEntity.setAppKey(authCodePo.getAppId()); authTokenEntity.setUserId(authCodePo.getUserId()); - isvAuthTokenMapper.save(authTokenEntity); - } else { - authTokenEntity.setAppAuthCode(authCode); - isvAuthTokenMapper.update(authTokenEntity); } + authTokenEntity.setAppAuthCode(authCode); + isvAuthTokenRepository.save(authTokenEntity); // 写入redis缓存 try { @@ -87,14 +81,14 @@ public class AuthCodeService implements AuthService { .eq("user_id", userId) .eq("status", ENABLE_TOKEN); - IsvAuthTokenEntity authTokenEntity = isvAuthTokenMapper.getByQuery(query); + IsvAuthTokenEntity authTokenEntity = isvAuthTokenRepository.findFirstByUserIdAndStatusTrue(userId); if (authTokenEntity == null) { throw new ServiceException("用户未授权插件应用"); } try { - authTokenEntity.setStatus(ENABLE_TOKEN); - isvAuthTokenMapper.update(authTokenEntity); + authTokenEntity.setStatus(true); + isvAuthTokenRepository.save(authTokenEntity); } catch (Exception e) { throw new ServiceException("解除授权失败,系统忙,请稍后!"); } diff --git a/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthTokenService.java b/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthTokenService.java index ca8d13f1..f3a2c514 100644 --- a/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthTokenService.java +++ b/sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthTokenService.java @@ -3,9 +3,9 @@ package com.gitee.sop.openapi.service; import com.alibaba.fastjson.JSONObject; import com.gitee.sop.openapi.config.RedisOperator; import com.gitee.sop.openapi.entity.IsvAuthTokenEntity; -import com.gitee.sop.openapi.mapper.IsvAuthTokenMapper; import com.gitee.sop.openapi.po.AuthCodePo; import com.gitee.sop.openapi.po.AuthTokePo; +import com.gitee.sop.openapi.repository.IsvAuthTokenRepository; import com.gitee.sop.openapi.util.GrantType; import com.gitee.sop.openapi.util.MD5GeneratorUtil; import com.gitee.sop.openapi.util.RedisKeyUtil; @@ -21,12 +21,12 @@ import org.springframework.stereotype.Service; public class AuthTokenService implements AuthService { private final RedisOperator redisOperator; - private final IsvAuthTokenMapper isvAuthTokenMapper; + private final IsvAuthTokenRepository isvAuthTokenRepository; public AuthTokenService(final RedisOperator redisOperator, - final IsvAuthTokenMapper isvAuthTokenMapper) { + final IsvAuthTokenRepository isvAuthTokenRepository) { this.redisOperator = redisOperator; - this.isvAuthTokenMapper = isvAuthTokenMapper; + this.isvAuthTokenRepository = isvAuthTokenRepository; } @@ -45,7 +45,7 @@ public class AuthTokenService implements AuthService { if (codePo == null) { throw new ServiceException("Can not found user by code"); } - IsvAuthTokenEntity authTokenEntity = isvAuthTokenMapper.getByColumn("app_auth_code", authTokePo.getCode()); + IsvAuthTokenEntity authTokenEntity = isvAuthTokenRepository.findFirstByAppAuthCode(authTokePo.getCode()); if (authTokenEntity == null) { throw new ServiceException("Can not found user by code"); } @@ -55,10 +55,10 @@ public class AuthTokenService implements AuthService { String refreshToken = MD5GeneratorUtil.generateValue(); - authTokenEntity.setStatus((byte) AUTHORIZED); + authTokenEntity.setStatus(true); authTokenEntity.setAppAuthToken(authToken); authTokenEntity.setAppRefreshToken(refreshToken); - isvAuthTokenMapper.update(authTokenEntity); + isvAuthTokenRepository.save(authTokenEntity); String authTokenKey = RedisKeyUtil.getAuthTokenKey(authToken); String refreshTokenKey = RedisKeyUtil.getRefreshTokenKey(refreshToken); diff --git a/sop-openapi/src/main/resources/application.properties b/sop-openapi/src/main/resources/application.properties index b208c10a..3ce313c5 100644 --- a/sop-openapi/src/main/resources/application.properties +++ b/sop-openapi/src/main/resources/application.properties @@ -1,6 +1,28 @@ -spring.profiles.active=dev +spring.profiles.active=standalone server.port=8089 spring.application.name=open-apis # ע -spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 \ No newline at end of file +spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 + + +## ݿ +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://localhost:3306/sop?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.hikari.connectionInitSql=set names utf8mb4 + +#ӳ +spring.datasource.hikari.pool-name=HikariCP +spring.datasource.hikari.max-lifetime=500000 +spring.datasource.hikari.minimum-idle=2 +spring.datasource.hikari.idle-timeout=60000 +spring.datasource.hikari.maximum-pool-size=10 +spring.datasource.hikari.connection-test-query=select 1 + +# Naming strategy +spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +spring.jpa.hibernate.globally_quoted_identifiers=true +spring.jpa.properties.hibernate.globally_quoted_identifiers=true +spring.jpa.show-sql=false \ No newline at end of file