fix: 修改 systemutilservice currentTimestamp 为 null 的 bug
fix:修改 TAccount 没有@version 字段的 bug
diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties
index b6561aa..e976303 100644
--- a/config/application-devel-pg-local.properties
+++ b/config/application-devel-pg-local.properties
@@ -20,3 +20,7 @@
jwt.expiration=3600
# user password
auth.password.bcrypt.seed=
+
+##################################################
+## quartz task scheduler
+shopbalance.updater.cron = -
\ No newline at end of file
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 3c76bf5..ada087d 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -20,4 +20,9 @@
jwt.expiration=3600
auth.password.bcrypt.seed=
spring.jackson.serialization.fail-on-empty-beans=false
-logging.level.org.springframework.web=DEBUG
\ No newline at end of file
+logging.level.org.springframework.web=DEBUG
+
+
+##################################################
+## quartz task scheduler
+shopbalance.updater.cron = -
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java b/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
index 2a89feb..3525011 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
@@ -53,7 +53,8 @@
@Column(name = "MAX_BAL", precision = 15, scale = 2)
private Double maxbal; // 最大余额限制
- @Column(name = "LAST_TRANSTIME", length = 8)
+ @Version
+ @Column(name = "LAST_TRANSTIME")
private Timestamp lasttranstime; //最后交易日期
@Column(name = "LASTDAY_TRANSAMT", precision = 9, scale = 2)
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TAccountDayBal.java b/src/main/java/com/supwisdom/dlpay/api/domain/TAccountDayBal.java
index c5bd5f4..63b1281 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TAccountDayBal.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TAccountDayBal.java
@@ -20,7 +20,7 @@
private Double amount;
@Version
- @Column(name = "update_time", nullable = false)
+ @Column(name = "update_time")
private Timestamp updateTime;
@Column(name = "lastRefno", nullable = false, length = 32)
diff --git a/src/main/java/com/supwisdom/dlpay/api/repositories/AccountService.java b/src/main/java/com/supwisdom/dlpay/api/repositories/AccountService.java
index 5e976e8..6f414a5 100644
--- a/src/main/java/com/supwisdom/dlpay/api/repositories/AccountService.java
+++ b/src/main/java/com/supwisdom/dlpay/api/repositories/AccountService.java
@@ -1,11 +1,10 @@
package com.supwisdom.dlpay.api.repositories;
import com.supwisdom.dlpay.api.domain.TPersondtl;
-import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
public interface AccountService {
- @Transactional(isolation = Isolation.SERIALIZABLE)
+ @Transactional
void recalcAccountBalance(TPersondtl dtl, Double amount, boolean overdraft);
}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java b/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java
index 0ba8274..b876d9d 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java
@@ -1,7 +1,6 @@
package com.supwisdom.dlpay.framework.data;
import java.sql.Timestamp;
-import java.util.Date;
public interface SystemDateTime {
String getHostdate();
@@ -10,7 +9,6 @@
String getHostdatetime();
- Date getSysdate();
+ Timestamp getSysdate();
- Timestamp getCurrentTimestamp();
}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
index af90257..e575265 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
@@ -11,29 +11,30 @@
/**
* 取数据库日期
- * */
+ */
+ @Transactional
SystemDateTime getSysdatetime();
/**
* 更新任务表
- * */
+ */
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
TTaskLock updateTaskLock(TTaskLock lock);
/**
* 取任务表
- * */
+ */
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
TTaskLock doLockTask(String taskcode, Integer minRecover, String remark);
/**
* 获取记账日期
- * */
+ */
String getAccdate();
/**
* 获取流水号
- * */
+ */
String getRefno();
/**
@@ -73,6 +74,7 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
TBusinesspara getBusinessValueForUpdateNowait(String parakey);
+
/********************** 获取【系统参数】【业务参数】通用方法 **********************/
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index ff86a29..3ca5ef6 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -35,40 +35,6 @@
private static final Logger logger = LoggerFactory.getLogger(SystemUtilServiceImpl.class);
- public static class SystemDateTimeImpl implements SystemDateTime {
- private Date now;
- private static final SimpleDateFormat sdft = new SimpleDateFormat("yyyyMMddHHmmss");
-
- public SystemDateTimeImpl(Date now) {
- this.now = now;
- }
-
- @Override
- public String getHostdate() {
- return sdft.format(this.now).substring(0, 8);
- }
-
- @Override
- public String getHosttime() {
- return sdft.format(this.now).substring(8, 14);
- }
-
- @Override
- public String getHostdatetime() {
- return sdft.format(this.now);
- }
-
- @Override
- public Date getSysdate() {
- return this.now;
- }
-
- @Override
- public Timestamp getCurrentTimestamp() {
- return new Timestamp(this.now.getTime());
- }
- }
-
/**
* 获取oracle数据库时间
*/
diff --git a/src/main/kotlin/com/supwisdom/dlpay/account_process_async.kt b/src/main/kotlin/com/supwisdom/dlpay/api/account_process_async.kt
similarity index 98%
rename from src/main/kotlin/com/supwisdom/dlpay/account_process_async.kt
rename to src/main/kotlin/com/supwisdom/dlpay/api/account_process_async.kt
index 51be41f..83bfde8 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/account_process_async.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/account_process_async.kt
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay
+package com.supwisdom.dlpay.api
import com.supwisdom.dlpay.api.repositories.ShopaccService
import mu.KotlinLogging
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
index 6dcc9ee..c52dce2 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
@@ -73,16 +73,19 @@
setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN)
this.opposite = AccountProxy(rechargeDrsubjno)
}.and().addDebitCreditRecord(AccountProxy(rechargeDrsubjno), AccountProxy(account),
- param.amount / 100.0, "账户充值")
+ param.amount / 100.0, "账户充值")
.also { builder ->
param.feelist?.forEach {
val feeamt = it.amount / 100.0
when (it.feetype) {
TradeDict.PAYTYPE_RECHARGE_COUPON -> {
//优惠折扣 优惠科目 -> 个人账户
- val feetypeConfig = accountUtilServcie.readFeetype(TradeDict.PAYTYPE_RECHARGE_COUPON, param.sourcetype)
- val subject = accountUtilServcie.readSubject(feetypeConfig.drsubjno) //不同在借方折扣科目
- builder.addDebitCreditRecord(AccountProxy(subject), AccountProxy(account), feeamt, feetypeConfig.summary)
+ val feetypeConfig = accountUtilServcie
+ .readFeetype(TradeDict.PAYTYPE_RECHARGE_COUPON, param.sourcetype)
+ val subject = accountUtilServcie
+ .readSubject(feetypeConfig.drsubjno) //不同在借方折扣科目
+ builder.addDebitCreditRecord(AccountProxy(subject),
+ AccountProxy(account), feeamt, feetypeConfig.summary)
}
//fixme: 服务费暂缺
// TradeDict.PAYTYPE_RECHARGE_SERVICEFEE -> {
@@ -92,7 +95,8 @@
// builder.addDebitCreditRecord(AccountProxy(rechargeDrsubjno), AccountProxy(subject), feeamt, feetypeConfig.summary)
//
// }
- else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "充值费用清单不支持feetype<${it.feetype}>")
+ else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "充值费用清单不支持feetype<${it.feetype}>")
}
}
}.init(transactionService)
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt b/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
index a5846bb..2dec950 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
@@ -15,7 +15,7 @@
shopaccService.recalcShopBalance(dtl.refno, true)
}
- @Scheduled(fixedRate = 5000)
+ @Scheduled(cron = "\${jobs.cronSchedule:-}")
fun dealShopUnupdatedDtl() {
shopaccService.findUnupdatedShopDtl(100).forEach {
doShopBlanceUpdate(it)
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt
index fb88e55..42e5974 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt
@@ -7,31 +7,35 @@
import com.supwisdom.dlpay.framework.domain.TShopacc
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.util.DateUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.framework.util.TradeDict.*
+import com.supwisdom.dlpay.framework.util.TradeDict.DTL_STATUS_SUCCESS
+import com.supwisdom.dlpay.framework.util.TradeDict.TRADE_FLAG_OUT
import com.supwisdom.dlpay.framework.util.TradeErrorCode
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Repository
+import org.springframework.stereotype.Service
import java.sql.Timestamp
import javax.persistence.EntityManager
import javax.persistence.LockModeType
import javax.persistence.OptimisticLockException
import javax.persistence.PersistenceContext
-@Repository
+@Service
class AccountServiceImpl : AccountService {
@PersistenceContext
private lateinit var entityManager: EntityManager
@Autowired
- lateinit var systemUtilServcie: SystemUtilService
+ private lateinit var systemUtilServcie: SystemUtilService
- private fun newAccounDayBal(dtl: TPersondtl, account: TAccount) = TAccountDayBal().apply {
- accno = account.accno
- accdate = dtl.accdate
- amount = 0.0
- checked = false
+ private fun newAccounDayBal(dtl: TPersondtl, account: TAccount): TAccountDayBal {
+ return TAccountDayBal().apply {
+ accno = account.accno
+ accdate = dtl.accdate
+ amount = 0.0
+ updateTime = systemUtilServcie.sysdatetime.sysdate
+ checked = false
+ }
}
private fun doRecalcAccountBalance(dtl: TPersondtl, amount: Double, account: TAccount): TAccountDayBal {
@@ -63,7 +67,7 @@
account.balance += dtl.amount
val sameDay = DateUtil.sameDay(account.lasttranstime,
- systemUtilServcie.sysdatetime.currentTimestamp) ?: false
+ systemUtilServcie.sysdatetime.sysdate) ?: false
if (!sameDay) {
account.lastdayTransamt = 0.0
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 608f899..d81db90 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -1,12 +1,10 @@
package com.supwisdom.dlpay.api.service.impl
-import com.supwisdom.dlpay.ShopAccBalanceAsyncTask
import com.supwisdom.dlpay.api.TransactionBuilder
import com.supwisdom.dlpay.api.dao.PersondtlDao
import com.supwisdom.dlpay.api.dao.TransactionMainDao
import com.supwisdom.dlpay.api.domain.*
import com.supwisdom.dlpay.api.repositories.AccountService
-import com.supwisdom.dlpay.api.repositories.ShopaccService
import com.supwisdom.dlpay.api.service.SourceTypeService
import com.supwisdom.dlpay.api.service.TransactionService
import com.supwisdom.dlpay.exception.TransactionCheckException
@@ -17,8 +15,6 @@
import com.supwisdom.dlpay.framework.util.TradeErrorCode
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
-import org.springframework.transaction.annotation.Propagation
-import org.springframework.transaction.annotation.Transactional
import java.sql.SQLException
import java.sql.Timestamp
import kotlin.math.absoluteValue
@@ -36,9 +32,6 @@
private lateinit var transactionMainDao: TransactionMainDao
@Autowired
- private lateinit var persondtlDao: PersondtlDao
-
- @Autowired
private lateinit var accountService: AccountService
@Autowired
@@ -64,7 +57,7 @@
accdate = systemUtilService.accdate
outTradeNo = builder.outtradeno
outId = builder.outId
- createTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
+ createTime = systemUtilService.sysdatetime.sysdate
operid = builder.operId
opertype = builder.operType
reverseFlag = builder.tradeType
@@ -310,7 +303,7 @@
if (transaction.shop) {
transaction.shopDtl.remark = remark
}
- transaction.endTime = systemUtilService.sysdatetime.currentTimestamp
+ transaction.endTime = systemUtilService.sysdatetime.sysdate
transactionMainDao.save(transaction)
return transaction
}
@@ -327,7 +320,7 @@
transaction.accdate = systemUtilService.accdate
transactionOnSuccess(transaction, remark, false)
- transaction.endTime = systemUtilService.sysdatetime.currentTimestamp
+ transaction.endTime = systemUtilService.sysdatetime.sysdate
transactionMainDao.save(transaction)
return transaction
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
index 1049c26..7c5f900 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
@@ -69,7 +69,7 @@
lowfreeLimit = lowfreeLimit
daylimit = daylimit
maxbal = systemUtilService.getSysparaValueAsDouble(SysparaUtil.SYSPARAID_NO1, SysparaUtil.SYSPARA_NO1_DEFAULT)
- lasttranstime = systemdatetime.currentTimestamp
+ lasttranstime = systemdatetime.sysdate
lastdayTransamt = 0.0
lastdayDpsamt = 0.0
opendate = systemdatetime.hostdate
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index 223a12b..48e9e29 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -1,68 +1,71 @@
package com.supwisdom.dlpay.api.service
-import com.supwisdom.dlpay.ShopAccBalanceAsyncTask
+import com.supwisdom.dlpay.api.ShopAccBalanceAsyncTask
import com.supwisdom.dlpay.api.TransactionBuilder
import com.supwisdom.dlpay.api.domain.TTransactionMain
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
+import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Propagation
import org.springframework.transaction.annotation.Transactional
interface TransactionService {
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun init(builder: TransactionBuilder): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun wip(refno: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun wip(builder: TransactionBuilder): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun fail(refno: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun fail(refno: String, remark: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun success(refno: String, remark: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun success(refno: String): TTransactionMain
// 撤销接口冲正类接口
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun reverse(originRefno: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun reverseInit(originRefno: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun reverseConfirm(refno: String): TTransactionMain
+ @Transactional
fun reverseFail(refno: String): TTransactionMain
// 冲正类接口
/**
* 冲正业务
*/
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun cancel(originRefno: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun cancelInit(originRefno: String): TTransactionMain
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun cancelConfirm(refno: String): TTransactionMain
+ @Transactional
fun cancelFail(refno: String): TTransactionMain
// 补帐接口
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+ @Transactional
fun repair(refno: String, remark: String): TTransactionMain
}
-@Component
+@Service
class TransactionServiceProxy {
@Autowired
private lateinit var transactionService: TransactionService
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 4c33b78..a4d11c5 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -23,6 +23,9 @@
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=true
+##################################################
+## quartz task scheduler
+shopbalance.updater.cron = 10/* * * * *
################################################
# user password
auth.password.bcrypt.length=10