Commit ee1659fd authored by Administrator's avatar Administrator

创建项目

parent f64ea89a
......@@ -6,7 +6,7 @@
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/baa_pay_v1.0</property>
<property name="connection.url">jdbc:mysql://172.17.5.17:31548/baa_pay_1.0</property>
<!-- JDBC connection pool (use the built-in) -->
<!--
......@@ -28,6 +28,7 @@
<mapping class="cn.quant.baa.pay.jpa.entity.DictionaryEntity"/>
<mapping class="cn.quant.baa.pay.jpa.entity.CustomerEntity"/>
<mapping class="cn.quant.baa.pay.jpa.entity.AccountEntity"/>
<mapping class="cn.quant.baa.pay.jpa.entity.PayHistoryEntity"/>
<!-- Drop and re-create the database schema on startup -->
<!--
......
package cn.quant.baa.pay.aspect;
import cn.quant.spring.annotation.ThreadSession;
import cn.quant.spring.context.ServerApplicationContext;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* Created by Administrator on 2021/8/23 0023.
*/
@Aspect
@Component
public class ThreadSessionAspect {
private static final Logger logger = LoggerFactory.getLogger(ThreadSessionAspect.class);
@Pointcut("@annotation(cn.quant.spring.annotation.ThreadSession)")
public void pointCut() {
}
@Around("pointCut()")
public Object Around(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
ThreadSession annotation = method.getAnnotation(ThreadSession.class);
logger.info("---->>>> Thread session aspect {}.", annotation.value());
Object object = joinPoint.proceed();
return object;
}
}
//package cn.quant.baa.pay.aspect;
//
//import cn.quant.spring.annotation.ThreadSession;
//import cn.quant.spring.context.ServerApplicationContext;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Method;
//
///**
// * Created by Administrator on 2021/8/23 0023.
// */
//@Aspect
//@Component
//public class ThreadSessionAspect {
//
// private static final Logger logger = LoggerFactory.getLogger(ThreadSessionAspect.class);
//
// @Pointcut("@annotation(cn.quant.spring.annotation.ThreadSession)")
// public void pointCut() {
// }
//
// @Around("pointCut()")
// public Object Around(ProceedingJoinPoint joinPoint) throws Throwable {
// MethodSignature signature = (MethodSignature) joinPoint.getSignature();
// Method method = signature.getMethod();
// ThreadSession annotation = method.getAnnotation(ThreadSession.class);
// logger.info("---->>>> Thread session aspect {}.", annotation.value());
// Object object = joinPoint.proceed();
// return object;
// }
//}
package cn.quant.baa.pay.context;
import cn.quant.baa.pay.jpa.entity.AccountEntity;
import cn.quant.baa.pay.model.BusinessRequest;
import cn.quant.spring.NullException;
import cn.quant.spring.context.BusinessSession;
......@@ -23,6 +24,8 @@ public class TransactionSession extends BusinessSession {
private RepositoryProxy repositoryProxy;
private AccountEntity account;
public TransactionSession(ServerApplicationContext context) {
super(context);
this.repositoryProxy = new JapRepositoryProxy(context.getParent());
......@@ -57,6 +60,15 @@ public class TransactionSession extends BusinessSession {
return session;
}
public AccountEntity getAccount() {
return account;
}
public void setAccount(AccountEntity account) {
this.account = account;
}
//repository
public RepositoryProxy getRepositoryProxy() {
return repositoryProxy;
}
......@@ -89,15 +101,12 @@ public class TransactionSession extends BusinessSession {
repositoryProxy.clear();
}
public JpaRepository getRepository(Class cls, TransactionSession session) {
public JpaRepository getRepository(Class cls) {
return repositoryProxy.getRepository(cls);
}
public <T> T findOne(Class<T> cls, Object key, TransactionSession session) {
if (session == null) {
throw new NullException("Session is null.");
}
RepositoryProxy repositoryProxy = session.getRepositoryProxy();
public <T> T findOne(Class<T> cls, Object key) {
RepositoryProxy repositoryProxy = this.getRepositoryProxy();
T t = null;
if (repositoryProxy != null) {
t = (T) repositoryProxy.get(cls, key);
......
package cn.quant.baa.pay.jpa.entity;
import cn.quant.spring.data.jpa.entity.EntityPrimaryIds;
import cn.quant.spring.util.StringUtils;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;
import java.util.Objects;
/**
* Created by Administrator on 2021/8/26 0026.
*/
@Embeddable
public class PayHistoryIds extends EntityPrimaryIds implements Serializable {
public final static String CLASS_NAME = PayHistoryEntity.class.getSimpleName();
@Column(name = "INSTITUTION_ID", nullable = false, updatable = false, length = 4)
private String institutionId;
@Column(name = "PRODUCT_ID", nullable = false, updatable = false, length = 4)
private String productId;
@Column(name = "EXTERNAL_ORDER_NO", nullable = false, updatable = false, length = 64)
private String externalOrderNo;
public String getInstitutionId() {
return institutionId;
}
public void setInstitutionId(String institutionId) {
this.institutionId = institutionId;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getExternalOrderNo() {
return externalOrderNo;
}
public void setExternalOrderNo(String externalOrderNo) {
this.externalOrderNo = externalOrderNo;
}
@Override
public String persistenceKey() {
return StringUtils.toDelimitedString(CLASS_NAME, institutionId, productId, externalOrderNo);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PayHistoryIds that = (PayHistoryIds) o;
return Objects.equals(institutionId, that.institutionId) &&
Objects.equals(productId, that.productId) &&
Objects.equals(externalOrderNo, that.externalOrderNo);
}
@Override
public int hashCode() {
return Objects.hash(CLASS_NAME, institutionId, productId, externalOrderNo);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("PayHistoryIds{");
sb.append("institutionId='").append(institutionId).append('\'');
sb.append(", productId='").append(productId).append('\'');
sb.append(", externalOrderNo='").append(externalOrderNo).append('\'');
sb.append(',').append(super.toString());
sb.append('}');
return sb.toString();
}
}
......@@ -7,14 +7,21 @@ import cn.quant.baa.pay.dict.CurrencyCode;
import cn.quant.baa.pay.dict.StatusCode;
import cn.quant.baa.pay.jpa.entity.AccountEntity;
import cn.quant.baa.pay.jpa.entity.AccountIds;
import cn.quant.baa.pay.jpa.repository.AccountRepository;
import cn.quant.baa.pay.model.AssertUtils;
import cn.quant.spring.NullException;
import cn.quant.spring.util.DateUtils;
import cn.quant.spring.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import static cn.quant.baa.pay.Constant.MINI_LOCAL_DATE;
import static cn.quant.baa.pay.dict.MessageEnum.*;
......@@ -31,6 +38,10 @@ public abstract class BusinessService {
public void prepare(String institutionId, String productId, String buyerId, TransactionSession session) {
if (session == null) {
throw new NullException("Session is null.");
}
if (StringUtils.isEmpty(institutionId)) {
AssertUtils.throwMessage(INSTITUTION_ID_ILLEGAL);
}
......@@ -46,7 +57,7 @@ public abstract class BusinessService {
AccountIds ids = new AccountIds();
ids.setInstitutionId(institutionId);
ids.setAccountRefNo(buyerId);
AccountEntity account = session.findOne(AccountEntity.class, ids, session);
AccountEntity account = session.findOne(AccountEntity.class, ids);
if (account == null) {
Long id = sequencer.nextId(buyerId.hashCode());
LocalDate now = LocalDate.now();
......@@ -73,8 +84,14 @@ public abstract class BusinessService {
account.setTotalCredit(BigDecimal.ZERO);
account.setTotalDebit(BigDecimal.ZERO);
account.setTxnNo(0);
Date date = DateUtils.now();
account.setCreatedDate(date);
account.setModifiedDate(date);
account.setPartitionKey(sequencer.getPartitionKey(id));
session.pushEntity(account);
}
session.setAccount(account);
}
}
......@@ -10,6 +10,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import static cn.quant.baa.pay.dict.MessageEnum.*;
......@@ -25,7 +26,8 @@ public class TransactionService extends BusinessService {
@Autowired
private MerchantAcquirerBuilder merchantAcquirerBuilder;
public void pay(PayRequestData data, TransactionSession session) {
@Transactional
public void pay(PayRequestData data) {
if (data == null) {
AssertUtils.throwMessage(EMPTY_REQ_DATA);
......@@ -47,8 +49,21 @@ public class TransactionService extends BusinessService {
AssertUtils.throwMessage(ACQUIRER_NOMATCH);
}
prepare(profile.getInstitutionId(), profile.getProductId(), StringUtils.trimAllWhitespace(data.getBuyerId()), session);
TransactionSession session = TransactionSession.session();
String institutionId = profile.getInstitutionId();
String productId = profile.getProductId();
String buyerId = StringUtils.trimAllWhitespace(data.getBuyerId());
if (StringUtils.isEmpty(buyerId)) {
AssertUtils.throwMessage(BUYER_ID_ILLEGAL);
}
prepare(institutionId, productId, buyerId, session);
System.currentTimeMillis();
session.commit();
}
}
......@@ -29,13 +29,11 @@ public class TransactionController extends AbstractController {
@BusinessMapping(session = 1)
@PostMapping("/pay")
public void pay(@RequestBody BusinessRequest<PayRequestData> request) {
TransactionSession session = TransactionSession.session();
String requestId = session.getRequestId();
PayRequestData data = request.getData();
transactionService.pay(data, session);
transactionService.pay(data);
System.currentTimeMillis();
......
......@@ -15,9 +15,9 @@ quant.server.sequencer.sequence-bits=8
#Database
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/baa_pay_v1.0?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=111111
spring.datasource.url=jdbc:mysql://172.17.5.17:31548/baa_pay_1.0?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=qa
spring.datasource.password=qatest
spring.datasource.hikari.minimum-idle=1
spring.datasource.hikari.maximum-pool-size=3
spring.datasource.hikari.data-source-properties.cachePrepStmts=true
......
......@@ -62,7 +62,7 @@
<logger name="org.springframework.boot.actuate" level="ERROR"/>
<logger name="org.springframework.boot.context" level="ERROR"/>
<logger name="org.springframework.boot.autoconfigure.logging" level="ERROR"/>
<!--<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>-->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="ERROR"/>
<logger name="org.hibernate.engine.QueryParameters" level="ERROR"/>
<logger name="org.hibernate.SQL" level="ERROR" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment