fix: 修改微信inapp 支付的业务事务完整性
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java
index c860bbf..2c66bbc 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/InAppPayService.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.agent;
 
 import com.supwisdom.dlpay.api.domain.TTransactionMain;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -17,15 +18,19 @@
    * @param transation
    * @return
    */
+  @Transactional
   AgentResponse<T> init(TTransactionMain transation);
 
   /**
    * 当用支付完成后,第三方支付平台会发起通知给服务端,由服务端处理后续业务
    *
+   *
+   * @param refno
    * @param request     - 第三方平台通知请求的 HttpRequest
    * @return
    */
-  AgentResponse<T> notify(HttpServletRequest request);
+  @Transactional
+  AgentResponse<T> notify(String refno, HttpServletRequest request);
 
   /**
    * 由服务端主动发起的查询第三方支付平交易情况
@@ -33,5 +38,6 @@
    * @param transation - 交易参数
    * @return
    */
+  @Transactional
   AgentResponse<T> query(TTransactionMain transation);
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt
index 4b8b1c9..50288b9 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/wechat_service_impl.kt
@@ -31,8 +31,6 @@
 class WechatServiceImpl(val sourceTypeService: SourceTypeService,
                         val agentServiceProxy: AgentServiceProxy,
                         val personIdentityDao: PersonIdentityDao,
-                        val sourceTypeConfigDao: SourceTypeConfigDao,
-                        var shopSourceTypeConfigDao: ShopSourceTypeConfigDao,
                         val consumePayService: ConsumePayService,
                         val transactionService: TransactionServiceProxy,
                         val restTemplate: RestTemplate) : WechatService {
@@ -372,7 +370,7 @@
             this.total_fee = 1
             this.spbill_create_ip = "14.23.150.211"
             this.body = "充值测试"
-            this.notify_url = "http://ykt.supwisdom.com:10201/payapi/api/notify/inapp/wechat/100010"
+            this.notify_url = "http://ykt.supwisdom.com:10201/payapi/api/notify/inapp/wechat/100010/${transaction.refno}"
             this.trade_type = "MWEB"
             this.scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \" https://pay.qq.com\",\"wap_name\": \"微信支付\"}}"
         }
@@ -455,9 +453,8 @@
         return agentResponse
     }
 
-    override fun doPayNotify(param: Map<String, String>): AgentResponse<QrcodePayTrans> {
+    override fun doPayNotify(transaction: TTransactionMain?, param: Map<String, String>): AgentResponse<QrcodePayTrans> {
         val agentResponse = AgentResponse<QrcodePayTrans>()
-        val transaction = consumePayService.getTransactionMainDtl(param["out_trade_no"], null, null)
         if (transaction == null) {
             agentResponse.code = AgentCode.REFNO_NOT_EXISTS
             agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
@@ -493,12 +490,6 @@
         val resultCode = param["result_code"]
         if (!returnCode.isNullOrEmpty() && "SUCCESS" == returnCode
                 && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) {
-            val transid = param["transaction_id"]
-            if (transid.isNullOrEmpty()) {
-                transactionService.success(transaction.refno)
-            } else {
-                transactionService.success(transaction.refno, transid, true)
-            }
             agentResponse.code = AgentCode.SUCCESS
             agentResponse.agentCode = resultCode
         } else {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt
index 0286f15..f87f922 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_alipay.kt
@@ -16,7 +16,7 @@
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
-    override fun notify(request: HttpServletRequest): AgentResponse<AlipayInAppResponse>? {
+    override fun notify(String: refno, request: HttpServletRequest): AgentResponse<AlipayInAppResponse>? {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt
index 841d411..2010519 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/inapp_wechatpay.kt
@@ -3,11 +3,9 @@
 import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.AgentResponse
 import com.supwisdom.dlpay.agent.InAppPayService
-import com.supwisdom.dlpay.api.domain.TShopdtl
 import com.supwisdom.dlpay.api.domain.TTransactionMain
-import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.api.service.TransactionServiceProxy
 import mu.KotlinLogging
-import org.dom4j.Element
 import org.dom4j.io.SAXReader
 import org.springframework.stereotype.Component
 import java.util.HashMap
@@ -15,8 +13,8 @@
 
 
 @Component("wechatInAppAgent")
-class WechatInAppService(private val sourceTypeService: SourceTypeService,
-                         private val wechatService: WechatService)
+class WechatInAppService(private val wechatService: WechatService,
+                         private val transactionServiceProxy: TransactionServiceProxy)
     : InAppPayService<TTransactionMain> {
 
     private val logger = KotlinLogging.logger { }
@@ -30,8 +28,8 @@
         return wechatPayResponse;
     }
 
-    override fun notify(request: HttpServletRequest): AgentResponse<TTransactionMain>? {
-        val wechatPayResponse = AgentResponse<TTransactionMain>();
+    override fun notify(refno: String, request: HttpServletRequest): AgentResponse<TTransactionMain>? {
+        val wechatPayResponse = AgentResponse<TTransactionMain>()
         // 解析结果存储在HashMap
         val map = HashMap<String, String>()
         // 读取输入流
@@ -43,11 +41,14 @@
         }
         // 释放资源
         request.inputStream.close()
-        val resp = wechatService.doPayNotify(map)
+        val transation = transactionServiceProxy.findTransactionByRefno(refno)
+        val resp = wechatService.doPayNotify(transation, map)
         if (resp.code == AgentCode.SUCCESS) {
+            wechatPayResponse.payload = transactionServiceProxy.success(refno)
             wechatPayResponse.agentBody = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
         } else {
             wechatPayResponse.agentBody = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[" + resp.agentMsg + "]]></return_msg></xml>"
+            wechatPayResponse.payload = transactionServiceProxy.fail(refno, resp.agentMsg)
         }
         return wechatPayResponse
     }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
index fc9e813..7dddd0c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
@@ -27,7 +27,7 @@
 
     fun doPayQuery(transaction: TTransactionMain): AgentResponse<QrcodePayTrans>
 
-    fun doPayNotify(param: Map<String, String>): AgentResponse<QrcodePayTrans>
+    fun doPayNotify(transaction: TTransactionMain?, param: Map<String, String>): AgentResponse<QrcodePayTrans>
 }
 
 @Component("wechatAgent")
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt
index a87324f..5710c4a 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/transaction_controller.kt
@@ -221,9 +221,10 @@
                                   private val transactionServiceProxy: TransactionServiceProxy,
                                   private val agentPayServiceContext: AgentPayServiceContext) {
 
-    @PostMapping("/inapp/{sourcetype}/{tenant}")
+    @PostMapping("/inapp/{sourcetype}/{tenant}/{refno}")
     fun inAppPayCallback(@PathVariable("sourcetype") sourcetype: String,
                          @PathVariable("tenant") tenant: String,
+                         @PathVariable("refno") refno: String,
                          request: HttpServletRequest): ResponseEntity<*> {
         val tenantDetails = tenantDetailsRegistrar.getTenantDetailsById(tenant)
         if (!tenantDetails.isPresent) {
@@ -232,7 +233,7 @@
         TenantContextHolder.getContext().tenant = tenantDetails.get()
         val agent = agentPayServiceContext.findInAppPayService<Any>(sourcetype)
                 ?: return ResponseBodyBuilder.badRequest("请求支付类型错误 <$sourcetype> 不存在")
-        val agentResponse = agent.notify(request)
+        val agentResponse = agent.notify(refno, request)
 
         return ResponseBodyBuilder.ok(agentResponse.agentBody)
     }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 77c3e01..b0aefd2 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -392,6 +392,10 @@
         return success(refno, "", true)
     }
 
+    override fun readByRefnoForUpdate(refno: String): TTransactionMain {
+        return transactionMainDao.findByRefnoForUpdate(refno)
+    }
+
     //////////////////////////////////////////////////////////////////
 // 回退业务接口,包括撤销和退款
     override fun refundInit(originRefno: String, refundAmount: Double, builder: TransactionBuilder): TTransactionMain {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index ca4ef1d..cb4a931 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -34,6 +34,9 @@
     @Transactional
     fun success(refno: String): TTransactionMain
 
+    @Transactional
+    fun readByRefnoForUpdate(refno: String): TTransactionMain
+
     /**
      * 退款类业务
      */
@@ -149,6 +152,10 @@
         return transactionMainDao.findByRefno(refno)
     }
 
+    fun findTransactionByRefnoForUpdate(refno: String): TTransactionMain {
+        return transactionMainDao.findByRefnoForUpdate(refno)
+    }
+
     fun findByOutTradeNo(refno: String): TTransactionMain? {
         return transactionMainDao.findByOutTradeNo(refno)
     }