修改了商户余额计算模块,采用借贷明细统计
diff --git a/src/main/java/com/supwisdom/dlpay/AppPreparedEvent.java b/src/main/java/com/supwisdom/dlpay/AppPreparedEvent.java
index 7783029..304379c 100644
--- a/src/main/java/com/supwisdom/dlpay/AppPreparedEvent.java
+++ b/src/main/java/com/supwisdom/dlpay/AppPreparedEvent.java
@@ -2,7 +2,6 @@
 
 import com.supwisdom.dlpay.system.common.DictPool;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.event.ApplicationPreparedEvent;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.event.EventListener;
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 3525011..cc1b9c7 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TAccount.java
@@ -54,7 +54,7 @@
   private Double maxbal; // 最大余额限制
 
   @Version
-  @Column(name = "LAST_TRANSTIME")
+  @Column(name = "LAST_TRANSTIME", nullable = false)
   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 63b1281..c5bd5f4 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")
+  @Column(name = "update_time", nullable = false)
   private Timestamp updateTime;
 
   @Column(name = "lastRefno", nullable = false, length = 32)
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
index 576c089..e1343d4 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
@@ -9,6 +9,7 @@
 import org.springframework.stereotype.Repository;
 
 import javax.persistence.LockModeType;
+import javax.persistence.SequenceGenerator;
 
 @Repository
 public interface TaskLockDao extends JpaRepository<TTaskLock, String> {
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
index b7df8d2..fdb5d2f 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
@@ -32,7 +32,7 @@
   private Double balance = 0.0;
 
   @Version
-  @Column(name = "LASTUPDATE")
+  @Column(name = "LASTUPDATE", nullable = false)
   private Timestamp lastUpdate = new Timestamp(System.currentTimeMillis());
 
   @Column(name = "MAC")
@@ -115,4 +115,11 @@
     this.lastUpdate = new Timestamp(System.currentTimeMillis());
   }
 
+  public Timestamp getLastUpdate() {
+    return lastUpdate;
+  }
+
+  public void setLastUpdate(Timestamp lastUpdate) {
+    this.lastUpdate = lastUpdate;
+  }
 }
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 3ca5ef6..51b2b0b 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
@@ -146,29 +146,31 @@
   @Override
   public int getSysparaValueAsInt(int paraid, int defaultValue) {
     TSyspara syspara = sysparaDao.findByParaid(paraid);
-    if (null != syspara && NumberUtil.isNumber(syspara.getParaval())) return Integer.parseInt(syspara.getParaval());
+    if (null != syspara && NumberUtil.isNumber(syspara.getParaval()))
+      return Integer.parseInt(syspara.getParaval());
     return defaultValue;
   }
 
   @Override
   public double getSysparaValueAsDouble(int paraid, double defaultValue) {
     TSyspara syspara = sysparaDao.findByParaid(paraid);
-    if (null != syspara && NumberUtil.isDecimal(syspara.getParaval())) return Double.parseDouble(syspara.getParaval());
+    if (null != syspara && NumberUtil.isDecimal(syspara.getParaval()))
+      return Double.parseDouble(syspara.getParaval());
     return defaultValue;
   }
 
   @Override
-  public TSyspara getSyspara(int paraid){
+  public TSyspara getSyspara(int paraid) {
     return sysparaDao.findByParaid(paraid);
   }
 
   @Override
-  public TSyspara getSysparaValueForUpdate(int paraid){
+  public TSyspara getSysparaValueForUpdate(int paraid) {
     return sysparaDao.findByParaidWithLock(paraid);
   }
 
   @Override
-  public TSyspara getSysparaValueForUpdateNowait(int paraid){
+  public TSyspara getSysparaValueForUpdateNowait(int paraid) {
     return sysparaDao.findByParaidWithLockNowait(paraid);
   }
 
@@ -195,7 +197,7 @@
   }
 
   @Override
-  public TBusinesspara getBusinessValueForUpdate(String parakey){
+  public TBusinesspara getBusinessValueForUpdate(String parakey) {
     if (!StringUtil.isEmpty(parakey)) return businessparaDao.findByParakeyForUpdate(parakey.trim());
     return null;
   }
@@ -207,7 +209,7 @@
   }
 
   @Override
-  public String getSubsystemSignKey(String syscode){
+  public String getSubsystemSignKey(String syscode) {
     // fixme: 验证数据无误性签名秘钥
     return "";
   }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/account_process_async.kt b/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
similarity index 100%
rename from src/main/kotlin/com/supwisdom/dlpay/api/account_process_async.kt
rename to src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
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 2dec950..0e6d694 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(cron = "\${jobs.cronSchedule:-}")
+    @Scheduled(cron = "\${shopbalance.updater.cron:-}")
     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 42e5974..c65bc41 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
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.dao.DebitCreditDtlDao
+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
@@ -7,9 +9,12 @@
 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.Subject
+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.hibernate.Transaction
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Repository
 import org.springframework.stereotype.Service
@@ -97,6 +102,9 @@
     @Autowired
     private lateinit var systemUtilService: SystemUtilService
 
+    @Autowired
+    private lateinit var transactionMainDao: TransactionMainDao
+
     override fun recalcShopBalance(dtl: TShopdtl, amount: Double, overdraft: Boolean) {
         val shopacc = entityManager.find(TShopacc::class.java, dtl.shopaccno, LockModeType.OPTIMISTIC)
                 ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS,
@@ -117,7 +125,11 @@
         if (shopdtl.updateBala) {
             return
         }
-        recalcShopBalance(shopdtl, shopdtl.amount, overdraft)
+        val amount = transactionMainDao.findByRefno(refno)?.sumAmountByAccno(shopdtl.shopaccno,
+                Subject.SUBJNO_MACHANT_INCOME, 2, "both")
+                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
+                        "交易参考号<$refno>不存在")
+        recalcShopBalance(shopdtl, amount, overdraft)
         shopdtl.updateBala = true
         entityManager.persist(shopdtl)
     }