From 1f57ac6c828ace7a640fc9098451d5d2211c2269 Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Tue, 18 Jun 2019 22:54:06 +0800 Subject: [PATCH] =?utf8?q?fix:=20=E4=BF=AE=E6=94=B9=20systemutilservice=20?= =?utf8?q?currentTimestamp=20=E4=B8=BA=20null=20=E7=9A=84=20bug=20fix?= =?utf8?q?=EF=BC=9A=E4=BF=AE=E6=94=B9=20=20TAccount=20=E6=B2=A1=E6=9C=89@v?= =?utf8?q?ersion=20=E5=AD=97=E6=AE=B5=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- config/application-devel-pg-local.properties | 4 +++ config/application-devel-pg.properties | 7 +++- .../supwisdom/dlpay/api/domain/TAccount.java | 3 +- .../dlpay/api/domain/TAccountDayBal.java | 2 +- .../api/repositories/AccountService.java | 3 +- .../dlpay/framework/data/SystemDateTime.java | 4 +-- .../framework/service/SystemUtilService.java | 12 ++++--- .../service/impl/SystemUtilServiceImpl.java | 34 ------------------ .../dlpay/{ => api}/account_process_async.kt | 2 +- .../api/controller/charge_api_controller.kt | 14 +++++--- .../com/supwisdom/dlpay/api/scheduler_task.kt | 2 +- .../api/service/impl/account_service_impl.kt | 26 ++++++++------ .../service/impl/transaction_service_impl.kt | 13 ++----- .../api/service/impl/user_service_impl.kt | 2 +- .../dlpay/api/service/transaction_service.kt | 35 ++++++++++--------- src/main/resources/application.properties | 3 ++ 16 files changed, 74 insertions(+), 92 deletions(-) rename src/main/kotlin/com/supwisdom/dlpay/{ => api}/account_process_async.kt (98%) diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties index b6561aa8..e976303b 100644 --- a/config/application-devel-pg-local.properties +++ b/config/application-devel-pg-local.properties @@ -20,3 +20,7 @@ jwt.secret=Zj5taLomEbrM0lk+NMQZbHfSxaDU1wekjT+kiC3YzDw= 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 3c76bf53..ada087da 100644 --- a/config/application-devel-pg.properties +++ b/config/application-devel-pg.properties @@ -20,4 +20,9 @@ jwt.secret=Zj5taLomEbrM0lk+NMQZbHfSxaDU1wekjT+kiC3YzDw= 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 2a89febc..35250115 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 @@ public class TAccount implements Serializable { @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 c5bd5f4f..63b12811 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 @@ public class TAccountDayBal implements Serializable { 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 5e976e8f..6f414a5c 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 0ba82740..b876d9d4 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 @@ public interface SystemDateTime { 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 af90257c..e5752653 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 @@ public interface SystemUtilService { /** * 取数据库日期 - * */ + */ + @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 @@ public interface SystemUtilService { @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 ff86a295..3ca5ef6e 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 @@ public class SystemUtilServiceImpl implements SystemUtilService { 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 51be41f0..83bfde8e 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 6dcc9ee8..c52dce29 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 @@ class ChargeAPIController { 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 @@ class ChargeAPIController { // 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 a5846bb6..2dec950f 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 @@ class MySchedulerTask { 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 fb88e55e..42e5974b 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.exception.TransactionProcessException 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 fun newAccounDayBal(dtl: TPersondtl, account: TAccount) = TAccountDayBal().apply { - accno = account.accno - accdate = dtl.accdate - amount = 0.0 - checked = false + private lateinit var systemUtilServcie: SystemUtilService + + 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 @@ class AccountServiceImpl : AccountService { 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 608f899f..d81db900 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.TradeDict 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 @@ -35,9 +31,6 @@ class TransactionServiceImpl : TransactionService { @Autowired private lateinit var transactionMainDao: TransactionMainDao - @Autowired - private lateinit var persondtlDao: PersondtlDao - @Autowired private lateinit var accountService: AccountService @@ -64,7 +57,7 @@ class TransactionServiceImpl : TransactionService { 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 @@ class TransactionServiceImpl : TransactionService { 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 @@ class TransactionServiceImpl : TransactionService { 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 1049c262..7c5f900d 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 @@ class UserServiceImpl : UserService { 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 223a12bc..48e9e29c 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 4c33b781..a4d11c5e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -23,6 +23,9 @@ spring.thymeleaf.mode=HTML5 spring.thymeleaf.cache=false spring.thymeleaf.enabled=true +################################################## +## quartz task scheduler +shopbalance.updater.cron = 10/* * * * * ################################################ # user password auth.password.bcrypt.length=10 -- 2.17.1