diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
index 4da560f..c14ee51 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
@@ -13,36 +13,36 @@
 
 @Service
 public class QrcodePatternServiceImpl implements QrcodePatternService {
-  private final QrcodePatternDao qrcodePatternDao;
+    private final QrcodePatternDao qrcodePatternDao;
 
-  public QrcodePatternServiceImpl(QrcodePatternDao qrcodePatternDao) {
-    this.qrcodePatternDao = qrcodePatternDao;
-  }
-
-  @Override
-  @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern')")
-  public List<QrcodePattern> getAllQrcodePattern() {
-    return qrcodePatternDao.findByTenantid(TenantContext.getTenantSchema());
-  }
-
-  @Override
-  @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'")
-  public void deleteAllQrcodePattern() {
-    qrcodePatternDao.deleteByTenantid(TenantContext.getTenantSchema());
-  }
-
-  @Override
-  @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'")
-  public QrcodePattern saveOrUpdateQrcodePattern(@NotNull QrcodePattern pattern) {
-    if (pattern.getTenantid() == null || pattern.getTenantid().isEmpty()) {
-      pattern.setTenantid(TenantContext.getTenantSchema());
+    public QrcodePatternServiceImpl(QrcodePatternDao qrcodePatternDao) {
+        this.qrcodePatternDao = qrcodePatternDao;
     }
-    return qrcodePatternDao.save(pattern);
-  }
 
-  @Override
-  @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern', #sourceType)")
-  public List<QrcodePattern> findAllBySourcetype(String sourceType) {
-    return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContext.getTenantSchema());
-  }
+    @Override
+    @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern')")
+    public List<QrcodePattern> getAllQrcodePattern() {
+        return qrcodePatternDao.findByTenantid(TenantContext.getTenantSchema());
+    }
+
+    @Override
+    @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true)
+    public void deleteAllQrcodePattern() {
+        qrcodePatternDao.deleteByTenantid(TenantContext.getTenantSchema());
+    }
+
+    @Override
+    @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true)
+    public QrcodePattern saveOrUpdateQrcodePattern(@NotNull QrcodePattern pattern) {
+        if (pattern.getTenantid() == null || pattern.getTenantid().isEmpty()) {
+            pattern.setTenantid(TenantContext.getTenantSchema());
+        }
+        return qrcodePatternDao.save(pattern);
+    }
+
+    @Override
+    @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern', #sourceType)")
+    public List<QrcodePattern> findAllBySourcetype(String sourceType) {
+        return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContext.getTenantSchema());
+    }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
index a4767f2..c961f32 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
@@ -23,7 +23,6 @@
   private String accdate; //记账日期
 
   @Column(name = "USERID", length = 32)
-  @NotNull
   private String userid;  //用户ID，或账号
 
   @Column(name = "ACCNO", length = 32)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt
index cc19440..ccae15f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/alipay_service_impl.kt
@@ -66,24 +66,27 @@
                 val response = alipayClient.execute(request)
                 if ("10000" == response.code) {
                     if (response.isSuccess) {
-                        agentResponse.agentRefno = response.tradeNo
                         agentResponse.code = AgentCode.SUCCESS
-                        agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                        agentResponse.agentRefno = response.tradeNo
+                        agentResponse.agentMsg = response.msg
+                        agentResponse.agentCode = response.code
+                        qrcodePayTrans.agentRefno = response.tradeNo
+                        agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodePayTrans)
                     } else {
                         agentResponse.code = AgentCode.FAIL
-                        agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                        agentResponse.agentMsg = response.subMsg
+                        agentResponse.agentMsg = response.msg
+                        agentResponse.agentCode = response.code
                         logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                     }
                 } else if ("10003" == response.code || "20000" == response.code) {
                     agentResponse.code = AgentCode.REQUIRE_QUERY
-                    agentResponse.agentMsg = "支付请求已提交，等待用户支付"
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
+                    agentResponse.agentMsg = response.msg
+                    agentResponse.agentCode = response.code
                     logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                 } else {
                     agentResponse.code = AgentCode.FAIL
                     agentResponse.agentMsg = response.msg
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
+                    agentResponse.agentCode = response.code
                     logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                 }
             } catch (e: AlipayApiException) {
@@ -132,21 +135,19 @@
                 val response = alipayClient.sdkExecute(request)
                 if (response.isSuccess) {
                     agentResponse.agentRefno = response.tradeNo
-                    agentResponse.code = AgentCode.REQUIRE_QUERY
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                    agentResponse.agentMsg = response.msg
+                    agentResponse.agentCode = response.code
                     //body 为APP
                     agentResponse.agentBody = response.body
                 } else {
                     agentResponse.code = AgentCode.FAIL
-                    agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                    agentResponse.agentMsg = response.subMsg
+                    agentResponse.agentMsg = response.msg
+                    agentResponse.agentCode = response.code
                     logger.error { "支付宝:${response.code},${response.msg},${response.subCode},${response.subMsg}" }
                 }
             } catch (e: AlipayApiException) {
                 logger.error { "支付宝:${e.message}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentMsg = "调用支付宝异常"
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             }
         }
         return agentResponse
@@ -169,12 +170,13 @@
             val response = alipayClient.execute(request)
             if (response.isSuccess) {
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
                 agentResponse.dtlStatus = DtlStatus.REFUND
             } else {
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "支付宝退款失败"
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
             }
         }
         return agentResponse
@@ -197,7 +199,8 @@
             if (response.isSuccess) {
                 //check response.totalAmount
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
                 when (response.tradeStatus) {
                     "TRADE_SUCCESS", "TRADE_FINISHED" -> agentResponse.dtlStatus = DtlStatus.SUCCESS
                     "TRADE_CLOSED" -> agentResponse.dtlStatus = DtlStatus.REFUND
@@ -205,8 +208,8 @@
                 }
             } else {
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "支付宝查询失败"
+                agentResponse.agentMsg = response.msg
+                agentResponse.agentCode = response.code
             }
         }
         return agentResponse
@@ -217,27 +220,20 @@
         var agentResponse = AgentResponse()
         if (refno.isNullOrEmpty()) {
             agentResponse.code = AgentCode.FAIL
-            agentResponse.agentMsg = "返回流水号为空"
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         var transaction = consumePayService.getTransactionMainDtl(refno, null, null)
         if (transaction == null) {
             agentResponse.code = AgentCode.REFNO_NOT_EXISTS
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         if (transaction.status == TradeDict.DTL_STATUS_SUCCESS) {
             agentResponse.code = AgentCode.SUCCESS
-            agentResponse.agentMsg = "流水已成功，不能重复入账"
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_ALIPAY, transaction.shopDtl.shopaccno, false, false)
         if (config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY].isNullOrEmpty()) {
             agentResponse.code = AgentCode.CONFIG_ERROR
-            agentResponse.agentMsg = "商户公钥未配置"
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
             return agentResponse
         }
         var flag = AlipaySignature.rsaCheckV1(param, config[PaytypeUtil.CFG_ALIPAY_PUBLICKEY], "UTF-8", "RSA2")
@@ -245,20 +241,17 @@
             true -> {
                 //total amt 校验 map["total_amount"]
                 var tradeno = param["trade_no"]
-                if(tradeno.isNullOrEmpty()){
+                if (tradeno.isNullOrEmpty()) {
                     transactionService.success(transaction.refno)
-                }else{
-                    transactionService.success(transaction.refno,tradeno, true)
+                } else {
+                    transactionService.success(transaction.refno, tradeno, true)
                 }
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
                 agentResponse
             }
             false -> {
                 logger.error { "支付宝签名校验错误" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentMsg = "签名校验错误"
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
                 agentResponse
             }
         }
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 94cd031..1f3b6d1 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
@@ -16,8 +16,10 @@
 import com.supwisdom.dlpay.util.PaytypeUtil
 import mu.KotlinLogging
 import org.apache.commons.lang.StringUtils
+import org.springframework.http.converter.StringHttpMessageConverter
 import org.springframework.stereotype.Service
 import org.springframework.web.client.RestTemplate
+import java.nio.charset.StandardCharsets
 
 
 @Service
@@ -61,6 +63,7 @@
             }
             bean.generalCheckSign()
             var xml = bean.generalCheckXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_OAUTHCODE, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
@@ -71,16 +74,17 @@
                 qrcodeTrans.agentUserId = openid
                 var ip = personIdentityDao.getByThirdUid(openid)
                 if (ip != null) {
-                    qrcodeTrans.agentUserId = ip.person.userid
+                    qrcodeTrans.userid = ip.person.userid
                 }
                 agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodeTrans)
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentCode = retcode
+                agentResponse.agentMsg = eleMap["return_msg"]
             } else {
                 logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "二维码身份查询失败"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -104,25 +108,40 @@
                 this.out_trade_no = transaction.refno
                 this.total_fee = MoneyUtil.YuanToFen(transaction.shopDtl.amount)
                 this.spbill_create_ip = qrcodeTrans.spip
+                this.body = "POS扫微信二维码支付"
             }
 
             bean.generalPaySign()
             var xml = bean.generaPayXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_QRCODEPAY, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
             var resultCode = eleMap["result_code"]
             var openid = eleMap["openid"]
+            var errorCode = eleMap["err_code"]
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
                     && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode && !openid.isNullOrEmpty()) {
                 agentResponse.code = AgentCode.SUCCESS
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentCode = resultCode
                 agentResponse.dtlStatus = DtlStatus.SUCCESS
-            } else {
-                logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
+                agentResponse.agentMsg = eleMap["return_msg"]
+                agentResponse.agentRefno = eleMap["transaction_id"]
+                qrcodeTrans.agentRefno =  eleMap["transaction_id"]
+                agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodeTrans)
+            } else if("SYSTEMERROR"==errorCode||"BANKERROR"==errorCode||"USERPAYING"==errorCode){
+                logger.error { "code=${errorCode},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "请查询支付结果"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
+                agentResponse.agentRefno = eleMap["transaction_id"]
+                qrcodeTrans.agentRefno =  eleMap["transaction_id"]
+                agentServiceProxy.qrcodePayTransSaveOrUpdate(qrcodeTrans)
+            }else{
+                agentResponse.code = AgentCode.FAIL
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
+                logger.error { "code=${errorCode},des=${eleMap["err_code_des"]}" }
             }
         }
         return agentResponse
@@ -148,22 +167,24 @@
             //TODO IP 问题
             bean.generaSign()
             val xml = bean.generaXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_UNIONPAY, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
             var resultCode = eleMap["result_code"]
-            val mweb_url = eleMap["mweb_url"]
+            val mwebUrl = eleMap["mweb_url"]
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
-                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode && !mweb_url.isNullOrEmpty()) {
+                    && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode && !mwebUrl.isNullOrEmpty()) {
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
-                agentResponse.agentBody = mweb_url
+                agentResponse.agentCode =resultCode
+                agentResponse.agentMsg = eleMap["return_msg"]
+                agentResponse.agentBody = mwebUrl
                 agentResponse.agentRefno = eleMap["prepay_id"]
             } else {
                 logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "预下单失败"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -182,26 +203,28 @@
             }
             bean.generalQuerySign()
             val xml = bean.generalQueryXML()
+            restTemplate.messageConverters[1] = StringHttpMessageConverter(StandardCharsets.UTF_8)
             var res = restTemplate.postForEntity(PaytypeUtil.CFG_WECHAT_QUERY, xml, String::class.java)
             var eleMap = XmlUtils.parseXml(res.body)
             var retcode = eleMap["return_code"]
             var resultCode = eleMap["result_code"]
-            val trade_state = eleMap["trade_state"]
+            val tradeState = eleMap["trade_state"]
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
                     && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode) {
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
-                when (trade_state) {
+                agentResponse.agentCode = resultCode
+                agentResponse.agentMsg = eleMap["return_msg"]
+                when (tradeState) {
                     "SUCCESS" -> agentResponse.dtlStatus = DtlStatus.SUCCESS
                     "REFUND" -> agentResponse.dtlStatus = DtlStatus.REFUND
                     "NOTPAY", "CLOSED", "REVOKED", "PAYERROR" -> agentResponse.dtlStatus = DtlStatus.FAIL
                     "USERPAYING" -> agentResponse.dtlStatus = DtlStatus.WAIT
                 }
             } else {
-                logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
+                logger.error { "code=${eleMap["err_code"]}},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "查询失败"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -230,13 +253,14 @@
             if (!retcode.isNullOrEmpty() && "SUCCESS" == retcode
                     && !resultCode.isNullOrEmpty() && "SUCCESS" == resultCode ) {
                 agentResponse.code = AgentCode.REQUIRE_QUERY
-                agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+                agentResponse.agentCode =resultCode
                 agentResponse.agentRefno = eleMap["refund_id"]
+                agentResponse.agentMsg = eleMap["return_msg"]
             } else {
                 logger.error { "code=${eleMap["err_code"]},des=${eleMap["err_code_des"]}" }
                 agentResponse.code = AgentCode.FAIL
-                agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-                agentResponse.agentMsg = "退款申请失败失败：${eleMap["err_code_des"]}"
+                agentResponse.agentCode = eleMap["err_code"]
+                agentResponse.agentMsg = eleMap["err_code_des"]
             }
         }
         return agentResponse
@@ -287,11 +311,11 @@
                 transactionService.success(transaction.refno,transid, true)
             }
             agentResponse.code = AgentCode.SUCCESS
-            agentResponse.agentCode = AgentResponse.AGENTCODE_SUCCESS
+            agentResponse.agentCode = resultCode
         } else {
             agentResponse.code = AgentCode.FAIL
-            agentResponse.agentCode = AgentResponse.AGENTCODE_FAIL
-            agentResponse.agentMsg = "${param["err_code"]}:${param["err_code_des"]}"
+            agentResponse.agentCode = param["err_code"]
+            agentResponse.agentMsg = param["err_code_des"]
             logger.error { "code=${param["err_code"]},des=${param["err_code_des"]}" }
         }
         return agentResponse
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 8de5cfe..f07cf84 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
@@ -29,7 +29,7 @@
     fun downloadBill(shopacc:String,accdate:String):BaseResp
 }
 
-@Component("wechatpayAgent")
+@Component("wechatAgent")
 class WeChatPayAgentService(val consumePayService: ConsumePayService,
                             val wechatService: WechatService) : AgentPayService {
     override fun auth(shopaccno: String?, billno: String?): AgentResponse {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
index 4e3c906..ecc5f3b 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
@@ -118,7 +118,7 @@
     fun logPostMethods(joinPoint: ProceedingJoinPoint, body: Any): Any {
         return try {
             if (body is APIRequestParam) {
-                TenantContext.setTenantSchema(body.tenantid)
+                //TenantContext.setTenantSchema(body.tenantid)
                 body.checkParam()
 
                 if (requestSignCheck &&
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index e47701b..483efd1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -532,7 +532,7 @@
         val qrcodeTrans = agentServiceProxy.qrcodePayTransFindByMerchIdAndBillno(param.shopaccno,
                 param.billno) ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                 .fail(apiResponse, TradeErrorCode.BUSINESS_DEAL_ERROR, "未找到billno"))
-        if (qrcodeTrans.refno.isNotEmpty()) {
+        if (!qrcodeTrans.refno.isNullOrEmpty()) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .fail(apiResponse, TradeErrorCode.BUSINESS_DEAL_ERROR, "该交易已确认，请查询结果"))
         }
@@ -558,7 +558,7 @@
                             "支付方式<${qrcodeTrans.sourceType}>不支持匿名支付"))
         }
         qrcodeTrans.spip = param.spip
-
+        val dtlType = consumePayService.getDtltypeDictionary(param.dtltype, Dictionary.DTLTYPES)
         //2. 初始化交易流水
         // sourcetype 资产类科目
         val stSubject = accountUtilServcie.readSubject(sourceType.paySubjno)
@@ -567,6 +567,8 @@
             setTransInfo(param.transdate, param.transtime, TradeCode.TRANSCODE_QRCODE, qrcodeTrans.sourceType)
             setOutTransInfo(qrcodeTrans.agentMerchId, qrcodeTrans.billno)
             payinfo = qrcodeSummary(sourceType)
+            description = dtlType.dictcaption
+            dtltype = param.dtltype
         }
 
         val shopacc = accountUtilServcie.readShopbyShopaccno(qrcodeTrans.agentMerchId)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
index a20638d..64f9033 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -34,11 +34,11 @@
     }
 
     fun oppositeAccNo(): String {
-        return this.oppAccno
+        return if (hasOpposite()) this.oppAccno else ""
     }
 
     fun oppositeAccName(): String {
-        return this.oppAccName
+        return if (hasOpposite()) this.oppAccName else ""
     }
 
     fun setOpposite(accno: String, accName: String) {
@@ -383,9 +383,11 @@
                     throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                             "商户交易金额不正确")
                 }
-                if (!it.hasOpposite()) {
-                    throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                            "商户交易对方账户未设置")
+                if (hasPerson()) {
+                    if (!person().isAnonymous() && !it.hasOpposite()) {
+                        throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                                "商户交易对方账户未设置")
+                    }
                 }
             }
         }
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 7c5abc8..2bca5e2 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -588,6 +588,6 @@
 INSERT INTO TB_QRCODE_PATTERN(ID, PATTERN, SOURCETYPE, TENANTID)
 VALUES(1, '28\d{16}', 'alipay', '{tenantid}');
 INSERT INTO TB_QRCODE_PATTERN(ID, PATTERN, SOURCETYPE, TENANTID)
-VALUES(2, '13\d{16}', 'wechatpay', '{tenantid}');
+VALUES(2, '13\d{16}', 'wechat', '{tenantid}');
 ----------------------------------------------------
 commit;
\ No newline at end of file
