Commit ee1659fd authored by Administrator's avatar Administrator

创建项目

parent f64ea89a
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<session-factory> <session-factory>
<!-- Database connection settings --> <!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <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) --> <!-- JDBC connection pool (use the built-in) -->
<!-- <!--
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
<mapping class="cn.quant.baa.pay.jpa.entity.DictionaryEntity"/> <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.CustomerEntity"/>
<mapping class="cn.quant.baa.pay.jpa.entity.AccountEntity"/> <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 --> <!-- Drop and re-create the database schema on startup -->
<!-- <!--
......
package cn.quant.baa.pay.aspect; //package cn.quant.baa.pay.aspect;
//
import cn.quant.spring.annotation.ThreadSession; //import cn.quant.spring.annotation.ThreadSession;
import cn.quant.spring.context.ServerApplicationContext; //import cn.quant.spring.context.ServerApplicationContext;
import org.aspectj.lang.ProceedingJoinPoint; //import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; //import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; //import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut; //import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature; //import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger; //import org.slf4j.Logger;
import org.slf4j.LoggerFactory; //import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
//
import java.lang.reflect.Method; //import java.lang.reflect.Method;
//
/** ///**
* Created by Administrator on 2021/8/23 0023. // * Created by Administrator on 2021/8/23 0023.
*/ // */
@Aspect //@Aspect
@Component //@Component
public class ThreadSessionAspect { //public class ThreadSessionAspect {
//
private static final Logger logger = LoggerFactory.getLogger(ThreadSessionAspect.class); // private static final Logger logger = LoggerFactory.getLogger(ThreadSessionAspect.class);
//
@Pointcut("@annotation(cn.quant.spring.annotation.ThreadSession)") // @Pointcut("@annotation(cn.quant.spring.annotation.ThreadSession)")
public void pointCut() { // public void pointCut() {
} // }
//
@Around("pointCut()") // @Around("pointCut()")
public Object Around(ProceedingJoinPoint joinPoint) throws Throwable { // public Object Around(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature(); // MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod(); // Method method = signature.getMethod();
ThreadSession annotation = method.getAnnotation(ThreadSession.class); // ThreadSession annotation = method.getAnnotation(ThreadSession.class);
logger.info("---->>>> Thread session aspect {}.", annotation.value()); // logger.info("---->>>> Thread session aspect {}.", annotation.value());
Object object = joinPoint.proceed(); // Object object = joinPoint.proceed();
return object; // return object;
} // }
} //}
package cn.quant.baa.pay.context; package cn.quant.baa.pay.context;
import cn.quant.baa.pay.jpa.entity.AccountEntity;
import cn.quant.baa.pay.model.BusinessRequest; import cn.quant.baa.pay.model.BusinessRequest;
import cn.quant.spring.NullException; import cn.quant.spring.NullException;
import cn.quant.spring.context.BusinessSession; import cn.quant.spring.context.BusinessSession;
...@@ -23,6 +24,8 @@ public class TransactionSession extends BusinessSession { ...@@ -23,6 +24,8 @@ public class TransactionSession extends BusinessSession {
private RepositoryProxy repositoryProxy; private RepositoryProxy repositoryProxy;
private AccountEntity account;
public TransactionSession(ServerApplicationContext context) { public TransactionSession(ServerApplicationContext context) {
super(context); super(context);
this.repositoryProxy = new JapRepositoryProxy(context.getParent()); this.repositoryProxy = new JapRepositoryProxy(context.getParent());
...@@ -57,6 +60,15 @@ public class TransactionSession extends BusinessSession { ...@@ -57,6 +60,15 @@ public class TransactionSession extends BusinessSession {
return session; return session;
} }
public AccountEntity getAccount() {
return account;
}
public void setAccount(AccountEntity account) {
this.account = account;
}
//repository
public RepositoryProxy getRepositoryProxy() { public RepositoryProxy getRepositoryProxy() {
return repositoryProxy; return repositoryProxy;
} }
...@@ -89,15 +101,12 @@ public class TransactionSession extends BusinessSession { ...@@ -89,15 +101,12 @@ public class TransactionSession extends BusinessSession {
repositoryProxy.clear(); repositoryProxy.clear();
} }
public JpaRepository getRepository(Class cls, TransactionSession session) { public JpaRepository getRepository(Class cls) {
return repositoryProxy.getRepository(cls); return repositoryProxy.getRepository(cls);
} }
public <T> T findOne(Class<T> cls, Object key, TransactionSession session) { public <T> T findOne(Class<T> cls, Object key) {
if (session == null) { RepositoryProxy repositoryProxy = this.getRepositoryProxy();
throw new NullException("Session is null.");
}
RepositoryProxy repositoryProxy = session.getRepositoryProxy();
T t = null; T t = null;
if (repositoryProxy != null) { if (repositoryProxy != null) {
t = (T) repositoryProxy.get(cls, key); 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; ...@@ -7,14 +7,21 @@ import cn.quant.baa.pay.dict.CurrencyCode;
import cn.quant.baa.pay.dict.StatusCode; import cn.quant.baa.pay.dict.StatusCode;
import cn.quant.baa.pay.jpa.entity.AccountEntity; import cn.quant.baa.pay.jpa.entity.AccountEntity;
import cn.quant.baa.pay.jpa.entity.AccountIds; 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.baa.pay.model.AssertUtils;
import cn.quant.spring.NullException;
import cn.quant.spring.util.DateUtils;
import cn.quant.spring.util.StringUtils; import cn.quant.spring.util.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; 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.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Date;
import static cn.quant.baa.pay.Constant.MINI_LOCAL_DATE; import static cn.quant.baa.pay.Constant.MINI_LOCAL_DATE;
import static cn.quant.baa.pay.dict.MessageEnum.*; import static cn.quant.baa.pay.dict.MessageEnum.*;
...@@ -31,6 +38,10 @@ public abstract class BusinessService { ...@@ -31,6 +38,10 @@ public abstract class BusinessService {
public void prepare(String institutionId, String productId, String buyerId, TransactionSession session) { public void prepare(String institutionId, String productId, String buyerId, TransactionSession session) {
if (session == null) {
throw new NullException("Session is null.");
}
if (StringUtils.isEmpty(institutionId)) { if (StringUtils.isEmpty(institutionId)) {
AssertUtils.throwMessage(INSTITUTION_ID_ILLEGAL); AssertUtils.throwMessage(INSTITUTION_ID_ILLEGAL);
} }
...@@ -46,7 +57,7 @@ public abstract class BusinessService { ...@@ -46,7 +57,7 @@ public abstract class BusinessService {
AccountIds ids = new AccountIds(); AccountIds ids = new AccountIds();
ids.setInstitutionId(institutionId); ids.setInstitutionId(institutionId);
ids.setAccountRefNo(buyerId); ids.setAccountRefNo(buyerId);
AccountEntity account = session.findOne(AccountEntity.class, ids, session); AccountEntity account = session.findOne(AccountEntity.class, ids);
if (account == null) { if (account == null) {
Long id = sequencer.nextId(buyerId.hashCode()); Long id = sequencer.nextId(buyerId.hashCode());
LocalDate now = LocalDate.now(); LocalDate now = LocalDate.now();
...@@ -73,8 +84,14 @@ public abstract class BusinessService { ...@@ -73,8 +84,14 @@ public abstract class BusinessService {
account.setTotalCredit(BigDecimal.ZERO); account.setTotalCredit(BigDecimal.ZERO);
account.setTotalDebit(BigDecimal.ZERO); account.setTotalDebit(BigDecimal.ZERO);
account.setTxnNo(0); account.setTxnNo(0);
Date date = DateUtils.now();
account.setCreatedDate(date);
account.setModifiedDate(date);
account.setPartitionKey(sequencer.getPartitionKey(id)); account.setPartitionKey(sequencer.getPartitionKey(id));
session.pushEntity(account); session.pushEntity(account);
} }
session.setAccount(account);
} }
} }
...@@ -10,6 +10,7 @@ import org.slf4j.Logger; ...@@ -10,6 +10,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import static cn.quant.baa.pay.dict.MessageEnum.*; import static cn.quant.baa.pay.dict.MessageEnum.*;
...@@ -25,7 +26,8 @@ public class TransactionService extends BusinessService { ...@@ -25,7 +26,8 @@ public class TransactionService extends BusinessService {
@Autowired @Autowired
private MerchantAcquirerBuilder merchantAcquirerBuilder; private MerchantAcquirerBuilder merchantAcquirerBuilder;
public void pay(PayRequestData data, TransactionSession session) { @Transactional
public void pay(PayRequestData data) {
if (data == null) { if (data == null) {
AssertUtils.throwMessage(EMPTY_REQ_DATA); AssertUtils.throwMessage(EMPTY_REQ_DATA);
...@@ -47,8 +49,21 @@ public class TransactionService extends BusinessService { ...@@ -47,8 +49,21 @@ public class TransactionService extends BusinessService {
AssertUtils.throwMessage(ACQUIRER_NOMATCH); 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(); System.currentTimeMillis();
session.commit();
} }
} }
...@@ -29,13 +29,11 @@ public class TransactionController extends AbstractController { ...@@ -29,13 +29,11 @@ public class TransactionController extends AbstractController {
@BusinessMapping(session = 1) @BusinessMapping(session = 1)
@PostMapping("/pay") @PostMapping("/pay")
public void pay(@RequestBody BusinessRequest<PayRequestData> request) { public void pay(@RequestBody BusinessRequest<PayRequestData> request) {
TransactionSession session = TransactionSession.session();
String requestId = session.getRequestId();
PayRequestData data = request.getData(); PayRequestData data = request.getData();
transactionService.pay(data, session); transactionService.pay(data);
System.currentTimeMillis(); System.currentTimeMillis();
......
...@@ -15,9 +15,9 @@ quant.server.sequencer.sequence-bits=8 ...@@ -15,9 +15,9 @@ quant.server.sequencer.sequence-bits=8
#Database #Database
spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver 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.url=jdbc:mysql://172.17.5.17:31548/baa_pay_1.0?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root spring.datasource.username=qa
spring.datasource.password=111111 spring.datasource.password=qatest
spring.datasource.hikari.minimum-idle=1 spring.datasource.hikari.minimum-idle=1
spring.datasource.hikari.maximum-pool-size=3 spring.datasource.hikari.maximum-pool-size=3
spring.datasource.hikari.data-source-properties.cachePrepStmts=true spring.datasource.hikari.data-source-properties.cachePrepStmts=true
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
<logger name="org.springframework.boot.actuate" level="ERROR"/> <logger name="org.springframework.boot.actuate" level="ERROR"/>
<logger name="org.springframework.boot.context" level="ERROR"/> <logger name="org.springframework.boot.context" level="ERROR"/>
<logger name="org.springframework.boot.autoconfigure.logging" 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.type.descriptor.sql.BasicBinder" level="ERROR"/>
<logger name="org.hibernate.engine.QueryParameters" level="ERROR"/> <logger name="org.hibernate.engine.QueryParameters" level="ERROR"/>
<logger name="org.hibernate.SQL" 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