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

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

@ -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.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("解除授权失败,系统忙,请稍后!");
}

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

@ -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
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