feat: 使用jpa作为orm框架

pull/7/head
wangping 5 years ago
parent 21b03137d1
commit e155866ad1
  1. 9
      sop-openapi/pom.xml
  2. 61
      sop-openapi/src/main/java/com/gitee/sop/openapi/entity/BaseEntity.java
  3. 21
      sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvAuthTokenEntity.java
  4. 23
      sop-openapi/src/main/java/com/gitee/sop/openapi/entity/IsvInfoEntity.java
  5. 11
      sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvAuthTokenMapper.java
  6. 11
      sop-openapi/src/main/java/com/gitee/sop/openapi/mapper/IsvInfoMapper.java
  7. 17
      sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvAuthTokenRepository.java
  8. 14
      sop-openapi/src/main/java/com/gitee/sop/openapi/repository/IsvInfoRepository.java
  9. 36
      sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthCodeService.java
  10. 14
      sop-openapi/src/main/java/com/gitee/sop/openapi/service/AuthTokenService.java
  11. 26
      sop-openapi/src/main/resources/application.properties

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.gitee.sop</groupId> <groupId>com.gitee.sop</groupId>
<artifactId>sop-parent</artifactId> <artifactId>sop-parent</artifactId>
<version>4.0.3-SNAPSHOT</version> <version>4.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!-- lookup parent from repository --> <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.gitee.sop.openapi</groupId> <groupId>com.gitee.sop.openapi</groupId>
@ -17,7 +17,7 @@
<dependency> <dependency>
<groupId>com.gitee.sop</groupId> <groupId>com.gitee.sop</groupId>
<artifactId>sop-service-common</artifactId> <artifactId>sop-service-common</artifactId>
<version>4.0.3-SNAPSHOT</version> <version>4.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
@ -87,6 +87,11 @@
<version>1.18.4</version> <version>1.18.4</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>

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

@ -1,11 +1,9 @@
package com.gitee.sop.openapi.entity; package com.gitee.sop.openapi.entity;
import lombok.Data; import lombok.Data;
import org.springframework.data.annotation.Id;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.GeneratedValue; import javax.persistence.Entity;
import javax.persistence.GenerationType;
import javax.persistence.Table; import javax.persistence.Table;
/*** /***
@ -14,30 +12,31 @@ import javax.persistence.Table;
*/ */
@Data @Data
@Entity
@Table(name = "isv_auth_token") @Table(name = "isv_auth_token")
public class IsvAuthTokenEntity { public class IsvAuthTokenEntity extends BaseEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
/** 数据库字段:id */
private Long id;
/** appKey, 数据库字段:app_key */ /** appKey, 数据库字段:app_key */
@Column(name = "app_key")
private String appKey; private String appKey;
/** userId, 数据库字段:user_id */ /** userId, 数据库字段:user_id */
@Column(name = "user_id")
private Long userId; private Long userId;
/** 1启用,2禁用, 数据库字段:status */ /** 1启用,2禁用, 数据库字段:status */
private Byte status; @Column(name = "status", columnDefinition = "Bit default '1'")
private Boolean status = true;
/** appAuthCode 数据库字段:app_auth_code */ /** appAuthCode 数据库字段:app_auth_code */
@Column(name = "app_auth_code")
private String appAuthCode; private String appAuthCode;
/** appAuthToken 数据库字段:app_auth_token */ /** appAuthToken 数据库字段:app_auth_token */
@Column(name = "app_auth_token")
private String appAuthToken; private String appAuthToken;
/** appRefreshToken 数据库字段:app_refresh_token */ /** appRefreshToken 数据库字段:app_refresh_token */
@Column(name = "app_refresh_token")
private String appRefreshToken; private String appRefreshToken;
} }

@ -1,11 +1,9 @@
package com.gitee.sop.openapi.entity; package com.gitee.sop.openapi.entity;
import lombok.Data; import lombok.Data;
import org.springframework.data.annotation.Id;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.GeneratedValue; import javax.persistence.Entity;
import javax.persistence.GenerationType;
import javax.persistence.Table; import javax.persistence.Table;
/*** /***
@ -13,18 +11,23 @@ import javax.persistence.Table;
* @author wangping created on 2020/11/2 16:22 * @author wangping created on 2020/11/2 16:22
*/ */
@Data @Data
@Entity
@Table(name = "isv_info") @Table(name = "isv_info")
public class IsvInfoEntity { public class IsvInfoEntity extends BaseEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
/** 数据库字段:id */
private Long id;
/** appKey, 数据库字段:app_key */ /** appKey, 数据库字段:app_key */
@Column(name = "app_key")
private String appKey; private String appKey;
/** 1启用,2禁用, 数据库字段:status */ /** 1启用,2禁用, 数据库字段:status */
@Column(name = "status")
private Byte status; private Byte status;
/** 1:RSA2,2:MD5 */
@Column(name = "sign_type")
private Byte signType;
@Column(name = "remark")
private String remark;
} }

@ -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<IsvAuthTokenEntity, Long> {
}

@ -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<IsvInfoEntity, Long> {
}

@ -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, Long> {
IsvAuthTokenEntity findFirstByAppKeyAndUserIdAndStatusTrue(String appKey, Long userId);
IsvAuthTokenEntity findFirstByUserIdAndStatusTrue(Long userId);
IsvAuthTokenEntity findFirstByAppAuthCode(String appAuthCode);
}

@ -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, Long> {
IsvInfoEntity findFirstByAppKey(String appKey);
}

@ -5,9 +5,9 @@ import com.gitee.fastmybatis.core.query.Query;
import com.gitee.sop.openapi.config.RedisOperator; import com.gitee.sop.openapi.config.RedisOperator;
import com.gitee.sop.openapi.entity.IsvAuthTokenEntity; import com.gitee.sop.openapi.entity.IsvAuthTokenEntity;
import com.gitee.sop.openapi.entity.IsvInfoEntity; 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.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.vo.AuthCodeVo;
import com.gitee.sop.openapi.util.MD5GeneratorUtil; import com.gitee.sop.openapi.util.MD5GeneratorUtil;
import com.gitee.sop.openapi.util.RedisKeyUtil; import com.gitee.sop.openapi.util.RedisKeyUtil;
@ -24,15 +24,15 @@ import org.springframework.transaction.annotation.Transactional;
@Service @Service
public class AuthCodeService implements AuthService { public class AuthCodeService implements AuthService {
private final IsvInfoMapper isvInfoMapper; private final IsvInfoRepository isvInfoRepository;
private final IsvAuthTokenMapper isvAuthTokenMapper; private final IsvAuthTokenRepository isvAuthTokenRepository;
private final RedisOperator redisOperator; private final RedisOperator redisOperator;
public AuthCodeService(final IsvInfoMapper isvInfoMapper, public AuthCodeService(final IsvInfoRepository isvInfoRepository,
final IsvAuthTokenMapper isvAuthTokenMapper, final IsvAuthTokenRepository isvAuthTokenRepository,
final RedisOperator redisOperator) { final RedisOperator redisOperator) {
this.isvInfoMapper = isvInfoMapper; this.isvInfoRepository = isvInfoRepository;
this.isvAuthTokenMapper = isvAuthTokenMapper; this.isvAuthTokenRepository = isvAuthTokenRepository;
this.redisOperator = redisOperator; this.redisOperator = redisOperator;
} }
@ -40,7 +40,7 @@ public class AuthCodeService implements AuthService {
@Transactional @Transactional
public AuthCodeVo getCode(AuthCodePo authCodePo) { 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) { if (isvInfo == null || isvInfo.getStatus().intValue() == FORBIDDEN) {
log.error("appId已禁用:{}", authCodePo.getAppId()); log.error("appId已禁用:{}", authCodePo.getAppId());
throw new ServiceException("应用ID未申请或已被禁用"); throw new ServiceException("应用ID未申请或已被禁用");
@ -48,11 +48,7 @@ public class AuthCodeService implements AuthService {
String authCode = MD5GeneratorUtil.generateValue(); String authCode = MD5GeneratorUtil.generateValue();
Query query = new Query() IsvAuthTokenEntity authTokenEntity = isvAuthTokenRepository.findFirstByAppKeyAndUserIdAndStatusTrue(authCodePo.getAppId(), authCodePo.getUserId());
.eq("app_key", authCodePo.getAppId())
.eq("user_id", authCodePo.getUserId())
.eq("status", ENABLE_TOKEN);
IsvAuthTokenEntity authTokenEntity = isvAuthTokenMapper.getByQuery(query);
AuthCodeVo authCodeVo = new AuthCodeVo(); AuthCodeVo authCodeVo = new AuthCodeVo();
authCodeVo.setCode(authCode); authCodeVo.setCode(authCode);
if (authTokenEntity == null) { if (authTokenEntity == null) {
@ -61,11 +57,9 @@ public class AuthCodeService implements AuthService {
authTokenEntity.setAppAuthCode(authCode); authTokenEntity.setAppAuthCode(authCode);
authTokenEntity.setAppKey(authCodePo.getAppId()); authTokenEntity.setAppKey(authCodePo.getAppId());
authTokenEntity.setUserId(authCodePo.getUserId()); authTokenEntity.setUserId(authCodePo.getUserId());
isvAuthTokenMapper.save(authTokenEntity);
} else {
authTokenEntity.setAppAuthCode(authCode);
isvAuthTokenMapper.update(authTokenEntity);
} }
authTokenEntity.setAppAuthCode(authCode);
isvAuthTokenRepository.save(authTokenEntity);
// 写入redis缓存 // 写入redis缓存
try { try {
@ -87,14 +81,14 @@ public class AuthCodeService implements AuthService {
.eq("user_id", userId) .eq("user_id", userId)
.eq("status", ENABLE_TOKEN); .eq("status", ENABLE_TOKEN);
IsvAuthTokenEntity authTokenEntity = isvAuthTokenMapper.getByQuery(query); IsvAuthTokenEntity authTokenEntity = isvAuthTokenRepository.findFirstByUserIdAndStatusTrue(userId);
if (authTokenEntity == null) { if (authTokenEntity == null) {
throw new ServiceException("用户未授权插件应用"); throw new ServiceException("用户未授权插件应用");
} }
try { try {
authTokenEntity.setStatus(ENABLE_TOKEN); authTokenEntity.setStatus(true);
isvAuthTokenMapper.update(authTokenEntity); isvAuthTokenRepository.save(authTokenEntity);
} catch (Exception e) { } catch (Exception e) {
throw new ServiceException("解除授权失败,系统忙,请稍后!"); throw new ServiceException("解除授权失败,系统忙,请稍后!");
} }

@ -3,9 +3,9 @@ package com.gitee.sop.openapi.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gitee.sop.openapi.config.RedisOperator; import com.gitee.sop.openapi.config.RedisOperator;
import com.gitee.sop.openapi.entity.IsvAuthTokenEntity; 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.AuthCodePo;
import com.gitee.sop.openapi.po.AuthTokePo; 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.GrantType;
import com.gitee.sop.openapi.util.MD5GeneratorUtil; import com.gitee.sop.openapi.util.MD5GeneratorUtil;
import com.gitee.sop.openapi.util.RedisKeyUtil; import com.gitee.sop.openapi.util.RedisKeyUtil;
@ -21,12 +21,12 @@ import org.springframework.stereotype.Service;
public class AuthTokenService implements AuthService { public class AuthTokenService implements AuthService {
private final RedisOperator redisOperator; private final RedisOperator redisOperator;
private final IsvAuthTokenMapper isvAuthTokenMapper; private final IsvAuthTokenRepository isvAuthTokenRepository;
public AuthTokenService(final RedisOperator redisOperator, public AuthTokenService(final RedisOperator redisOperator,
final IsvAuthTokenMapper isvAuthTokenMapper) { final IsvAuthTokenRepository isvAuthTokenRepository) {
this.redisOperator = redisOperator; this.redisOperator = redisOperator;
this.isvAuthTokenMapper = isvAuthTokenMapper; this.isvAuthTokenRepository = isvAuthTokenRepository;
} }
@ -45,7 +45,7 @@ public class AuthTokenService implements AuthService {
if (codePo == null) { if (codePo == null) {
throw new ServiceException("Can not found user by code"); 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) { if (authTokenEntity == null) {
throw new ServiceException("Can not found user by code"); throw new ServiceException("Can not found user by code");
} }
@ -55,10 +55,10 @@ public class AuthTokenService implements AuthService {
String refreshToken = MD5GeneratorUtil.generateValue(); String refreshToken = MD5GeneratorUtil.generateValue();
authTokenEntity.setStatus((byte) AUTHORIZED); authTokenEntity.setStatus(true);
authTokenEntity.setAppAuthToken(authToken); authTokenEntity.setAppAuthToken(authToken);
authTokenEntity.setAppRefreshToken(refreshToken); authTokenEntity.setAppRefreshToken(refreshToken);
isvAuthTokenMapper.update(authTokenEntity); isvAuthTokenRepository.save(authTokenEntity);
String authTokenKey = RedisKeyUtil.getAuthTokenKey(authToken); String authTokenKey = RedisKeyUtil.getAuthTokenKey(authToken);
String refreshTokenKey = RedisKeyUtil.getRefreshTokenKey(refreshToken); String refreshTokenKey = RedisKeyUtil.getRefreshTokenKey(refreshToken);

@ -1,6 +1,28 @@
spring.profiles.active=dev spring.profiles.active=standalone
server.port=8089 server.port=8089
spring.application.name=open-apis spring.application.name=open-apis
# 注册中心 # 注册中心
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 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
Loading…
Cancel
Save