新接口完善和其他修改
diff --git a/config/application-devel-pg-xkx.properties b/config/application-devel-pg-xkx.properties
index e03fe08..390649f 100644
--- a/config/application-devel-pg-xkx.properties
+++ b/config/application-devel-pg-xkx.properties
@@ -12,7 +12,12 @@
 spring.datasource.password=123456
 database.dbtype=postgresql
 
+# logging settings
+spring.jpa.show-sql = false
 logging.level.org.hibernate.SQL=ERROR
+logging.level.com.mascloud=ERROR
+logging.level.root=info
+
 # Redis settings
 spring.redis.host=localhost
 spring.redis.port=6379
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserMessageData.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserMessageData.java
new file mode 100644
index 0000000..666c677
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserMessageData.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Getter
+@Setter
+public class UserMessageData {
+  private String msgid;   //tb_msg的id
+  private String content; //tb_msg的content
+  private String lastupdate;  //tb_msg的lastupdate
+  private String refno;   //tb_msg的refno
+  private String transdesc; //refno对应流水的交易描述
+  private Double amount;  //refno对应流水的交易金额
+  private String userid;  //tb_msg的userid
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserQueryMessageParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserQueryMessageParam.java
new file mode 100644
index 0000000..d9a01e3
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserQueryMessageParam.java
@@ -0,0 +1,28 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class UserQueryMessageParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "用户ID不能为空")
+  private String userid;
+
+  @Sign
+  private Integer pageNo; //可以为空,默认1
+
+  @Sign
+  private Integer pageSize; //可以为空,默认10
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserQueryMessageResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserQueryMessageResponse.java
new file mode 100644
index 0000000..b5e4028
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserQueryMessageResponse.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserQueryMessageResponse extends ApiResponse {
+  private int pageNo = 1;
+  private int pageSize = 10;
+  private int totalCount = 0;
+  private int totalPages = 0;
+  private List<UserMessageData> data;
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmParam.java
index 678c24e..0b5851f 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayConfirmParam.java
@@ -6,21 +6,22 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 @Getter
 @Setter
 public class YnrccPayConfirmParam extends APIRequestParam {
   @Sign
-  @NotNull(message = "交易参考号不能为空")
+  @NotBlank(message = "交易参考号不能为空")
   private String refno;
 
   @Sign
-  @NotNull(message = "参数Plain不能为空")
+  @NotBlank(message = "参数Plain不能为空")
   private String plain;   //农商行快捷支付参数
 
   @Sign
-  @NotNull(message = "参数Signature不能为空")
+  @NotBlank(message = "参数Signature不能为空")
   private String signature;   //农商行快捷支付参数
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyParam.java
index 6845d83..bd6e000 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayLimitModifyParam.java
@@ -7,21 +7,22 @@
 import lombok.Setter;
 
 import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 
 @Getter
 @Setter
 public class YnrccPayLimitModifyParam extends APIRequestParam {
   @Sign
-  @NotEmpty(message = "用户ID不能为空")
+  @NotBlank(message = "用户ID不能为空")
   private String userid;
 
   @Sign
-  @NotEmpty(message = "银行卡号不能为空")
+  @NotBlank(message = "银行卡号不能为空")
   private String bankcardno;
 
   @Sign
-  @NotEmpty(message = "签约商户不能为空")
+  @NotBlank(message = "签约商户不能为空")
   private String shopaccno;
 
   @Sign
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderParam.java
index 6e66c41..a497a13 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayOrderParam.java
@@ -7,6 +7,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Positive;
 
@@ -14,15 +15,15 @@
 @Setter
 public class YnrccPayOrderParam extends APIRequestParam {
   @Sign
-  @NotNull(message = "用户唯一号不能为空")
+  @NotBlank(message = "用户唯一号不能为空")
   private String userid; //用户userid
 
   @Sign
-  @NotNull(message = "银行卡号不能为空")
+  @NotBlank(message = "银行卡号不能为空")
   private String bankcardno;
 
   @Sign
-  @NotNull(message = "对接系统唯一订单号不能为空")
+  @NotBlank(message = "对接系统唯一订单号不能为空")
   private String billno;
 
   @Sign
@@ -31,18 +32,18 @@
   private Integer amount;
 
   @Sign
-  @NotNull(message = "请指定交易商户")
+  @NotBlank(message = "请指定交易商户")
   private String shopaccno;
 
   @Sign
-  @NotNull(message = "交易日期不能为空")
+  @NotBlank(message = "交易日期不能为空")
   private String transdate;
   @Sign
-  @NotNull(message = "交易时间不能为空")
+  @NotBlank(message = "交易时间不能为空")
   private String transtime;
 
   @Sign
-  @NotNull(message = "流水类型不能为空")
+  @NotBlank(message = "流水类型不能为空")
   private String dtltype;
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundParam.java
index decc341..73095ce 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayRefundParam.java
@@ -9,6 +9,7 @@
 import org.apache.commons.lang3.StringUtils;
 
 import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 @Getter
@@ -26,13 +27,13 @@
   private Integer refundAmount;
 
   @Sign
-  @NotNull(message = "撤销或退款流水号不能为空")
+  @NotBlank(message = "撤销或退款流水号不能为空")
   private String requestbillno;
   @Sign
-  @NotNull(message = "交易日期不能为空")
+  @NotBlank(message = "交易日期不能为空")
   private String transdate;
   @Sign
-  @NotNull(message = "交易时间不能为空")
+  @NotBlank(message = "交易时间不能为空")
   private String transtime;
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyParam.java
index 581316b..da80b3a 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignApplyParam.java
@@ -6,21 +6,22 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 
 @Getter
 @Setter
 public class YnrccPaySignApplyParam extends APIRequestParam {
   @Sign
-  @NotEmpty(message = "用户ID不能为空")
+  @NotBlank(message = "用户ID不能为空")
   private String userid;
 
   @Sign
-  @NotEmpty(message = "银行卡号不能为空")
+  @NotBlank(message = "银行卡号不能为空")
   private String bankcardno;
 
   @Sign
-  @NotEmpty(message = "签约商户不能为空")
+  @NotBlank(message = "签约商户不能为空")
   private String shopaccno;
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelParam.java
index 17e3b57..9d83baf 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignCancelParam.java
@@ -6,21 +6,22 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 
 @Getter
 @Setter
 public class YnrccPaySignCancelParam extends APIRequestParam {
   @Sign
-  @NotEmpty(message = "用户ID不能为空")
+  @NotBlank(message = "用户ID不能为空")
   private String userid;
 
   @Sign
-  @NotEmpty(message = "银行卡号不能为空")
+  @NotBlank(message = "银行卡号不能为空")
   private String bankcardno;
 
   @Sign
-  @NotEmpty(message = "签约商户不能为空")
+  @NotBlank(message = "签约商户不能为空")
   private String shopaccno;
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmParam.java
index 136bc58..aa85cb6 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignConfirmParam.java
@@ -6,6 +6,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
@@ -13,15 +14,15 @@
 @Setter
 public class YnrccPaySignConfirmParam extends APIRequestParam {
   @Sign
-  @NotEmpty(message = "签约号不能为空")
+  @NotBlank(message = "签约号不能为空")
   private String signNo; //申请时返回的签约号
 
   @Sign
-  @NotNull(message = "参数Plain不能为空")
+  @NotBlank(message = "参数Plain不能为空")
   private String plain;   //农商行快捷支付参数
 
   @Sign
-  @NotNull(message = "参数Signature不能为空")
+  @NotBlank(message = "参数Signature不能为空")
   private String signature;   //农商行快捷支付参数
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignInfo.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignInfo.java
new file mode 100644
index 0000000..785d556
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignInfo.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Getter
+@Setter
+public class YnrccPaySignInfo {
+  private String signNo; //申请时返回的签约号
+  private String bankcardno; //签约银行卡号
+  private String shopaccno; //核心平台商户账号
+  private String shopname;  //核心平台商户名称
+  private String signtime;  //签约时间 yyyyMMddHHmmss
+  private String userid;  //核心平台用户ID
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignListQueryParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignListQueryParam.java
new file mode 100644
index 0000000..3a923d9
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignListQueryParam.java
@@ -0,0 +1,26 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+@Getter
+@Setter
+public class YnrccPaySignListQueryParam extends APIRequestParam {
+  @Sign
+  private String userid; //可二选一
+
+  @Sign
+  private String bankcardno; //可二选一
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    if (StringUtils.isEmpty(userid) && StringUtils.isEmpty(bankcardno)) {
+      throw new RequestParamCheckException("未指定要查询的签约用户!");
+    }
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignListQueryResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignListQueryResponse.java
new file mode 100644
index 0000000..526f979
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignListQueryResponse.java
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.*;
+
+import java.util.List;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+public class YnrccPaySignListQueryResponse extends ApiResponse {
+  private List<YnrccPaySignInfo> data;
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignQueryParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignQueryParam.java
index 5d52f38..d18e016 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignQueryParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPaySignQueryParam.java
@@ -6,21 +6,22 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 
 @Getter
 @Setter
 public class YnrccPaySignQueryParam extends APIRequestParam {
   @Sign
-  @NotEmpty(message = "用户ID不能为空")
+  @NotBlank(message = "用户ID不能为空")
   private String userid;
 
   @Sign
-  @NotEmpty(message = "银行卡号不能为空")
+  @NotBlank(message = "银行卡号不能为空")
   private String bankcardno;
 
   @Sign
-  @NotEmpty(message = "签约商户不能为空")
+  @NotBlank(message = "签约商户不能为空")
   private String shopaccno;
 
   @Override
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayThirdAuthParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayThirdAuthParam.java
new file mode 100644
index 0000000..5f225e4
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayThirdAuthParam.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+@Getter
+@Setter
+public class YnrccPayThirdAuthParam extends APIRequestParam {
+  @Sign
+  @NotBlank(message = "第三方服务标识不能为空")
+  private String thirdservice;
+
+  @Sign
+  @NotBlank(message = "用户ID不能为空")
+  private String userid;
+
+  @Sign
+  @NotBlank(message = "银行卡号不能为空")
+  private String bankcardno;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayThirdAuthResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayThirdAuthResponse.java
new file mode 100644
index 0000000..eb1babb
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/YnrccPayThirdAuthResponse.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.*;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+public class YnrccPayThirdAuthResponse extends ApiResponse{
+  private String sdkConfigData;
+  private String access2ServiceData;
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java
index 18f1521..9eb32fb 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ConsumePropxy.java
@@ -34,4 +34,6 @@
     @PostMapping("/ynrccpay/refund")
     YnrccPayRefundResponse ynrccPayRefund(@RequestBody YnrccPayRefundParam param);
 
+    @PostMapping("/ynrccpay/thirdAuth")
+    YnrccPayThirdAuthResponse ynrccPayThirdAuth(@RequestBody YnrccPayThirdAuthParam param);
 }
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index 01f8fd4..1fb815f 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -93,4 +93,10 @@
 
   @PostMapping("/api/user/ynrccpayModifyLimit")
   YnrccPayLimitModifyResponse modifyYnrccPayLimit(@RequestBody YnrccPayLimitModifyParam param);
+
+  @PostMapping("/api/user/queryMessage")
+  UserQueryMessageResponse queryUserMessage(@RequestBody UserQueryMessageParam param);
+
+  @PostMapping("/api/user/ynrccpaySignList")
+  YnrccPaySignListQueryResponse queryYnrccPaySignList(@RequestBody YnrccPaySignListQueryParam param);
 }
diff --git a/payapi/build.gradle b/payapi/build.gradle
index cdb07b4..7a4c6cf 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -115,7 +115,11 @@
 //    implementation files('libs/ojdbc6.jar')
     implementation 'commons-dbcp:commons-dbcp:1.4'
     implementation 'commons-beanutils:commons-beanutils:1.9.3'
-    implementation files('libs/ynrcc-mbp-1.1.0-RELEASE.jar')
+    implementation files('libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar')
+
+    //大理农商行sdk需求jar
+    implementation 'cn.hutool:hutool-crypto:5.4.7'
+    implementation 'org.bouncycastle:bcprov-jdk15on:1.64'
 
     implementation 'log4j:log4j:1.2.17'
     implementation 'com.alibaba:fastjson:1.2.60'
diff --git a/payapi/libs/ynrcc-mbp-1.1.0-RELEASE.jar b/payapi/libs/ynrcc-mbp-1.1.0-RELEASE.jar
deleted file mode 100644
index 0aee6ef..0000000
--- a/payapi/libs/ynrcc-mbp-1.1.0-RELEASE.jar
+++ /dev/null
Binary files differ
diff --git a/payapi/libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar b/payapi/libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar
new file mode 100644
index 0000000..c3d54ee
--- /dev/null
+++ b/payapi/libs/ynrcc-openapi-sdk-1.1.2-RELEASE.jar
Binary files differ
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java
index d0a3474..38a6982 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/ynrccpay/YnrccPayUtil.java
@@ -20,6 +20,7 @@
 
   public static final String SUCCESS = "ZF0000";
   public static final String WAIT_FOR_QUERY = "ZF0098"; //等待查询结果
+  public static final String NO_RECORDS_TODAY = "0406"; //当日无交易明细
 
 
   public static String toJson(Object obj) {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java
index d8b0949..adc6075 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPaySignDao.java
@@ -5,6 +5,8 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface YnrccPaySignDao extends JpaRepository<TYnrccPaySign, String> {
   @Query("from TYnrccPaySign t where t.bankcardno=?1 and t.shopaccno=?2 and t.status='normal'")
@@ -13,5 +15,17 @@
   @Query("select count(t.id) from TYnrccPaySign t where t.bankcardno=?1 and t.shopaccno<>?2 and t.status='normal' and t.signFlag is true ")
   int countByBankcardnoAndSignStatus(String bankcardno, String shopaccno);
 
+  @Query("from TYnrccPaySign t where t.bankcardno=?1 and t.shopaccno<>?2 and t.status='normal' and t.signFlag is true")
+  List<TYnrccPaySign> queryOtherShopSign(String bankcardno, String shopaccno);
+
   TYnrccPaySign getById(String id);
+
+  @Query("from TYnrccPaySign t where t.userid=?1 and t.status='normal' and t.signFlag is true")
+  List<TYnrccPaySign> queryActiveSignsByUserid(String userid);
+
+  @Query("from TYnrccPaySign t where t.bankcardno=?1 and t.status='normal' and t.signFlag is true")
+  List<TYnrccPaySign> queryActiveSignsByBankcardno(String bankcardno);
+
+  @Query("from TYnrccPaySign t where t.userid=?1 and t.bankcardno=?2 and t.status='normal' and t.signFlag is true")
+  List<TYnrccPaySign> queryActiveSignsByUseridAndBankcardno(String userid, String bankcardno);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/PageRes.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/PageRes.java
new file mode 100644
index 0000000..03467f9
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/PageRes.java
@@ -0,0 +1,51 @@
+package com.supwisdom.dlpay.framework.util;
+
+import java.util.List;
+
+public class PageRes<T> {
+  private int pageNo = 1;
+  private int pageSize = 10;
+  private int totalCount = 0;
+  private int totalPages = 0;
+  private List<T> data;
+
+  public int getPageNo() {
+    return pageNo;
+  }
+
+  public void setPageNo(int pageNo) {
+    this.pageNo = pageNo;
+  }
+
+  public int getPageSize() {
+    return pageSize;
+  }
+
+  public void setPageSize(int pageSize) {
+    this.pageSize = pageSize;
+  }
+
+  public int getTotalCount() {
+    return totalCount;
+  }
+
+  public void setTotalCount(int totalCount) {
+    this.totalCount = totalCount;
+  }
+
+  public int getTotalPages() {
+    return totalPages;
+  }
+
+  public void setTotalPages(int totalPages) {
+    this.totalPages = totalPages;
+  }
+
+  public List<T> getData() {
+    return data;
+  }
+
+  public void setData(List<T> data) {
+    this.data = data;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserMessageService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserMessageService.java
new file mode 100644
index 0000000..842b9d9
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserMessageService.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.system.service;
+
+import com.supwisdom.dlpay.api.bean.UserMessageData;
+import com.supwisdom.dlpay.framework.util.PageRes;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface UserMessageService {
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  PageRes<UserMessageData> queryMessageByUserid(String userid, int pageNo, int pageSize);
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserMessageServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserMessageServiceImpl.java
new file mode 100644
index 0000000..b5fa9ce
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserMessageServiceImpl.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.api.bean.UserMessageData;
+import com.supwisdom.dlpay.framework.util.PageRes;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.bean.CitizenCardShowBean;
+import com.supwisdom.dlpay.system.service.UserMessageService;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class UserMessageServiceImpl implements UserMessageService {
+  @PersistenceContext
+  private EntityManager entityManager;
+
+  @Override
+  public PageRes<UserMessageData> queryMessageByUserid(String userid, int pageNo, int pageSize) {
+    StringBuffer querySql = new StringBuffer("select a.msgid,a.content,a.lastupdate,a.refno,b.transdesc,b.amount,a.userid " +
+        " from tb_msg a left join tb_persondtl b on a.refno=b.refno where a.userid=:userid order by a.lastupdate desc");
+    StringBuffer countSql = new StringBuffer("select count(a.msgid) as cnt " +
+        " from tb_msg a left join tb_persondtl b on a.refno=b.refno where a.userid=:userid ");
+
+    Query query = entityManager.createNativeQuery(querySql.toString());
+    Query countQuery = entityManager.createNativeQuery(countSql.toString());
+    query.setParameter("userid", userid.trim());
+    countQuery.setParameter("userid", userid.trim());
+    query.setFirstResult((pageNo - 1) * pageSize);
+    query.setMaxResults(pageSize); //分页显示
+    query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(UserMessageData.class));
+    List<UserMessageData> list = query.getResultList();
+    BigInteger cnt = (BigInteger) countQuery.getSingleResult();
+    PageRes<UserMessageData> page = new PageRes<>();
+    page.setPageNo(pageNo);
+    page.setPageSize(pageSize);
+    page.setTotalCount(cnt == null ? 0 : cnt.intValue());
+    page.setTotalPages(page.getTotalCount() % page.getPageSize() > 0 ? (page.getTotalCount() / page.getPageSize() + 1) : (page.getTotalCount() / page.getPageSize()));
+    page.setData(list == null ? new ArrayList<>(0) : list);
+    return page;
+  }
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt
index c1e037b..3949c55 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/ynrcc_netpay_service_impl.kt
@@ -1,32 +1,22 @@
 package com.supwisdom.dlpay.agent.service.impl
 
 import com.csii.ynrcc.open.api.pay.YNRCCFastGateWayPayApi
+import com.csii.ynrcc.open.api.service.User
+import com.csii.ynrcc.open.api.service.YNRCCOpenServiceApi
 import com.google.gson.Gson
 import com.supwisdom.dlpay.agent.service.YnrccNetPayService
 import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayCommonResp
 import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayResp
 import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil
-import com.supwisdom.dlpay.api.bean.YnrccPaySignApplyParam
-import com.supwisdom.dlpay.api.bean.YnrccPaySignApplyResponse
-import com.supwisdom.dlpay.api.dao.CardDao
-import com.supwisdom.dlpay.api.dao.PersonDao
-import com.supwisdom.dlpay.api.repositories.ShopaccService
+import com.supwisdom.dlpay.api.domain.TPerson
 import com.supwisdom.dlpay.api.service.SourceTypeService
-import com.supwisdom.dlpay.citizencard.dao.YnrccPaySignDao
-import com.supwisdom.dlpay.citizencard.domain.TYnrccPaySign
 import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.dao.ShopaccDao
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.MoneyUtil
-import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.dlpay.framework.util.*
 import mu.KotlinLogging
 import org.springframework.http.HttpEntity
 import org.springframework.http.HttpHeaders
 import org.springframework.http.MediaType
-import org.springframework.http.ResponseEntity
 import org.springframework.http.converter.StringHttpMessageConverter
 import org.springframework.stereotype.Service
 import org.springframework.util.LinkedMultiValueMap
@@ -72,9 +62,49 @@
         params["TransId"] = "IFSR"
         params["Mer_Id"] = merId.trim()
         params["MerURL"] = merUrl.trim()
+        params["PAY_MODE"] = "QS"
 
         //调SDK生成签名
         val signData = YNRCCFastGateWayPayApi.sign(params)
+        if (signData["Plain"].isNullOrEmpty() || signData["Signature"].isNullOrEmpty()) {
+            resp.code = "ZE0002"
+            resp.message = "签名计算错误!"
+            logger.error("签名后[Plain]和[Signature]参数为空!")
+            return resp
+        }
+
+        resp.code = YnrccPayUtil.SUCCESS
+        resp.message = "SUCCESS"
+        resp.plain = signData["Plain"]
+        resp.signature = signData["Signature"]
+        return resp
+    }
+
+    override fun doApplyAuthYnrccPaySign(shopaccno: String, oldCustomerSignNo: String): YnrccPayResp {
+        val resp = YnrccPayResp()
+        val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false)
+        val merId = config[YnrccPayUtil.MER_ID]
+        if (merId.isNullOrEmpty()) {
+            resp.code = "ZE0001"
+            resp.message = "系统参数未配置[Mer_Id]"
+            logger.error(resp.error())
+            return resp
+        }
+
+        val params = hashMapOf<String, String>()
+        params["TransId"] = "IFSR"
+        params["Mer_Id"] = merId.trim()
+        params["CustomerSignNo"] = oldCustomerSignNo.trim()
+        params["PAY_MODE"] = "QS"
+
+        //调SDK生成签名
+        val signData = YNRCCFastGateWayPayApi.sign(params)
+        if (signData["Plain"].isNullOrEmpty() || signData["Signature"].isNullOrEmpty()) {
+            resp.code = "ZE0002"
+            resp.message = "签名计算错误!"
+            logger.error("签名后[Plain]和[Signature]参数为空!")
+            return resp
+        }
 
         resp.code = YnrccPayUtil.SUCCESS
         resp.message = "SUCCESS"
@@ -106,6 +136,7 @@
         params["TransId"] = "IFCR"
         params["Mer_Id"] = merId.trim()
         params["CustomerSignNo"] = customerSignNo
+        params["PAY_MODE"] = "Q"
 
         val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名
         val plain = signData["Plain"]
@@ -149,22 +180,25 @@
         val result = restTemplate.postForEntity(url, httpEntity, String::class.java)
         if (200 == result.statusCodeValue) {
             //请求成功
+            logger.info("农商行网关快捷支付请求【$opt】返回:\nurl=[$url]\nResponse Body=[" + result.body + "]")
             val resJson = Gson().fromJson(result.body, YnrccPayCommonResp::class.java)
             if (null == resJson || StringUtil.isEmpty(resJson.plain) || StringUtil.isEmpty(resJson.signature)) {
                 return error("ZE0098", "请求农商行网关【$opt】返回数据为空!")
             }
 
             val resData = YNRCCFastGateWayPayApi.verify(resJson.signature, resJson.plain) //调SDK验证签名
-            logger.info("农商行网关快捷支付请求【$opt】返回:\nurl=[$url]\nResponse=[" + YnrccPayUtil.toJson(resData) + "]")
-            return if (YnrccPayUtil.SUCCESS == resData["RespCode"]) {
+            logger.info("农商行网关快捷支付请求【$opt】返回:\nurl=[$url]\nResponse Plain=[" + YnrccPayUtil.toJson(resData) + "]")
+            val respCode = resData["RespCode"]?.trim()?.replace("\r\n", "")
+            return if (YnrccPayUtil.SUCCESS == respCode) {
+                resData["RespCode"] = respCode
                 resData["RespDesc"] = "SUCCESS"
                 resData
             } else {
-                val errcode = resData["RespCode"]
                 val errmsg = YnrccPayUtil.errcode.firstOrNull {
-                    it.second.code == errcode
+                    it.second.code == respCode
                 }?.second?.msg
-                resData["RespDesc"] = "$errcode $errmsg"  //设置失败信息
+                resData["RespCode"] = respCode
+                resData["RespDesc"] = "$respCode $errmsg"  //设置失败信息
                 resData
             }
         } else {
@@ -211,9 +245,16 @@
         params["CustomerSignNo"] = customerSignNo
         params["MerURL"] = merUrl
         params["MsgExt"] = extData
+        params["PAY_MODE"] = "QS"
 
         //调SDK生成签名
         val signData = YNRCCFastGateWayPayApi.sign(params)
+        if (signData["Plain"].isNullOrEmpty() || signData["Signature"].isNullOrEmpty()) {
+            resp.code = "ZE0002"
+            resp.message = "签名计算错误!"
+            logger.error("签名后[Plain]和[Signature]参数为空!")
+            return resp
+        }
 
         resp.code = YnrccPayUtil.SUCCESS
         resp.message = "SUCCESS"
@@ -247,6 +288,7 @@
         params["OrgMerchantSeqNo"] = orignRefno
         params["Amount"] = MoneyUtil.formatYuanToString(amount / 100.0)
         params["OrgMerchantDate"] = orignTransDate
+        params["PAY_MODE"] = "Q"
 
         val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名
         val plain = signData["Plain"]
@@ -306,6 +348,7 @@
         params["Mer_IdName"] = merIdName.trim()
         params["OrderNo"] = orignRefno
         params["OrderDate"] = orignTransDate
+        params["PAY_MODE"] = "Q"
 
         val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名
         val plain = signData["Plain"]
@@ -339,4 +382,48 @@
         return resp
     }
 
+    override fun doQueryYnrccPayChkfile(checkDate: String, shopaccno: String): YnrccPayResp {
+        val resp = YnrccPayResp()
+        val config = sourceTypeService.getConsumePaytypeConfig(TradeDict.PAYTYPE_YNRCC_PAY, shopaccno, false, false)
+        val gateWay = config[YnrccPayUtil.GATEWAY]
+        val merId = config[YnrccPayUtil.MER_ID]
+        if (gateWay.isNullOrEmpty()) {
+            resp.code = "ZE0001"
+            resp.message = "系统参数未配置[网关地址]"
+            logger.error(resp.error())
+            return resp
+        }
+        if (merId.isNullOrEmpty()) {
+            resp.code = "ZE0001"
+            resp.message = "系统参数未配置[Mer_Id]"
+            logger.error(resp.error())
+            return resp
+        }
+
+        val url = String.format(gateWay, "MerchantCheckFileQry.do") //赋予接口名
+        val params = hashMapOf<String, String>()
+        params["TransId"] = "IDFR"
+        params["Mer_Id"] = merId.trim()
+        params["ClearDate"] = checkDate
+        params["PAY_MODE"] = "Q"
+
+        val signData = YNRCCFastGateWayPayApi.sign(params) //调SDK生成签名
+        val plain = signData["Plain"]
+        val signature = signData["Signature"]
+        if (plain.isNullOrEmpty() || signature.isNullOrEmpty()) {
+            resp.code = "ZE0002"
+            resp.message = "签名计算错误!"
+            logger.error(resp.error())
+            return resp
+        }
+
+        val result = postForm(url, plain, signature, "对账") //发起表单提交
+        resp.code = result["RespCode"]
+        resp.message = result["RespDesc"]
+        if (YnrccPayUtil.SUCCESS == result["RespCode"]) {
+            resp.plain = result["Plain"] //对账单
+        }
+        return resp
+    }
+
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt
index f2e5bdc..127e319 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrcc_netpay_service.kt
@@ -8,15 +8,20 @@
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayResp
 import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil
+import com.supwisdom.dlpay.api.dao.TransactionMainDao
 import com.supwisdom.dlpay.api.domain.TTransactionMain
+import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.util.MoneyUtil
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Component
 
 interface YnrccNetPayService {
     fun doAnalysisSignature(shopaccno: String, plain: String, signature: String): Map<String, String>
 
-    fun doApplyYnrccPaySign(shopaccno: String): YnrccPayResp
+    fun doApplyYnrccPaySign(shopaccno: String): YnrccPayResp  //首次签约
+
+    fun doApplyAuthYnrccPaySign(shopaccno: String, oldCustomerSignNo: String): YnrccPayResp //授权签约
 
     fun doCancelYnrccPaySign(shopaccno: String, customerSignNo: String): YnrccPayResp
 
@@ -26,12 +31,16 @@
     fun doYnrccPayRefund(shopaccno: String, orignRefno: String, amount: Int, orignTransDate: String): YnrccPayResp
 
     fun doQueryYnrccPayResult(shopaccno: String, orignRefno: String, orignTransDate: String): YnrccPayResp
+
+    fun doQueryYnrccPayChkfile(checkDate: String, shopaccno: String): YnrccPayResp
 }
 
 @Component("ynrccpayAgent")
 class YnrccNetPayAgent: AgentPayService<DtlStatus>{
     @Autowired
     private lateinit var ynrccNetPayService: YnrccNetPayService
+    @Autowired
+    lateinit var transactionMainDao: TransactionMainDao
 
     private fun agentCode(code: String, msg: String?): org.springframework.data.util.Pair<AgentCode, YnrccRespCode> {
         return YnrccPayUtil.errcode.firstOrNull {
@@ -61,8 +70,12 @@
     }
 
     override fun refund(transaction: TTransactionMain): AgentResponse<DtlStatus> {
+        val originalDtl = transactionMainDao.findByRefno(transaction.reverseRefno)?:
+            throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "原始流水<${transaction.reverseRefno}>不存在")
+
+        //fixme:必须找原流水获取下单日期
         val resp = ynrccNetPayService.doYnrccPayRefund(transaction.shopDtl.shopaccno, transaction.reverseRefno,
-                MoneyUtil.YuanToFen(transaction.personDtl.amount), transaction.shopDtl.accdate)
+                MoneyUtil.YuanToFen(transaction.personDtl.amount), originalDtl.shopDtl.accdate)
         return AgentResponse<DtlStatus>().also {
             val code = agentCode(resp.code, resp.message)
             it.code = code.first
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrccpay_checkfile_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrccpay_checkfile_service.kt
new file mode 100644
index 0000000..0c7126e
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/ynrccpay_checkfile_service.kt
@@ -0,0 +1,157 @@
+package com.supwisdom.dlpay.agent.service
+
+import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.AgentResponse
+import com.supwisdom.dlpay.agent.CheckFileProvider
+import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil
+import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus
+import com.supwisdom.dlpay.api.domain.TTransactionChkfile
+import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.api.service.TransactionReconciliationService
+import com.supwisdom.dlpay.exception.TransactionException
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.util.ConstantUtil
+import mu.KotlinLogging
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Component
+
+@Component("ynrccpayCheckFileProvider")
+class YnrccpayCheckFileProvider : CheckFileProvider {
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+    @Autowired
+    private lateinit var transactionReconciliationService: TransactionReconciliationService
+    @Autowired
+    private lateinit var sourceTypeService: SourceTypeService
+    @Autowired
+    private lateinit var ynrccNetPayService:YnrccNetPayService
+
+    private val logger = KotlinLogging.logger { }
+
+    override fun acquireCheckFile(checkStatus: TSourceTypeCheckStatus): AgentResponse<TSourceTypeCheckStatus> {
+        try {
+            val billDate = checkStatus.checkAccdate
+            logger.info("【农商行网关快捷支付】对账单下载:download checkdate=【$billDate】")
+
+            val chkfile: TTransactionChkfile = transactionReconciliationService
+                .getTransactionChkfile(billDate, checkStatus.sourceType)?.let { file ->
+                    when (file.status) {
+                        ConstantUtil.CHKFILE_STATUS_INIT -> file //初始化直接返回
+                        ConstantUtil.CHKFILE_STATUS_ERROR -> reinitCheckFile(file) //错误或未对账的直接重新拉取
+                        else -> {
+                            when (checkStatus.forceRecheck) {
+                                true -> reinitCheckFile(file)  //对账已完成但强制重新对账
+                                false -> {
+                                    if (file.status == ConstantUtil.CHKFILE_STATUS_UNCHECK) {
+                                        file
+                                    } else {
+                                        throw TransactionException(-1, "【农商行网关快捷支付】该天[$billDate]已对账完成")
+                                    }
+                                } //对账已完成报错
+                            }
+                        }
+                    }
+                }
+                ?: transactionReconciliationService.saveInitTransactionChkfile(billDate, checkStatus.sourceType)
+
+            if (chkfile.status == ConstantUtil.CHKFILE_STATUS_UNCHECK) {
+                return successDownload("[$billDate]日对账数据已入库成功", checkStatus)
+            }
+
+            val shopaccno = ""
+            val resp = ynrccNetPayService.doQueryYnrccPayChkfile(billDate, shopaccno)
+            when (resp.code) {
+                YnrccPayUtil.SUCCESS -> {
+                    //TODO: 农商行网关快捷支付 对账文件解析
+                    val agentUrl = ""
+
+                    //成功
+                    return AgentResponse<TSourceTypeCheckStatus>().also {
+                        it.code = AgentCode.FAIL
+                        it.agentMsg = "获取对账文件逻辑暂缺"
+//                        it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+//                            this.checkFileOk = false
+//                            this.chkfileUrl = agentUrl
+//                        })
+                    }
+
+                }
+                YnrccPayUtil.NO_RECORDS_TODAY -> {
+                    //当日无交易明细,也创建空记录
+                    transactionReconciliationService.doSuccessTransactionChkfile(chkfile, "请求银行返回:当日无交易明细")
+                    //成功
+                    return successDownload("当日无交易明细", checkStatus.apply {
+                        this.chkfileUrl = "none"
+                    })
+                }
+                else -> {
+                    //报错,退出对账单拉取
+                    logger.error("农商行网关快捷支付对账单下载[$billDate]报错:${resp.message}")
+                    chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
+                    chkfile.remark = "请求获取对账文件报错:${resp.message}"
+                    transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
+
+                    //失败
+                    return AgentResponse<TSourceTypeCheckStatus>().also {
+                        it.code = AgentCode.FAIL
+                        it.agentMsg = chkfile.remark
+                        it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+                            this.remark = chkfile.remark
+                        })
+                    }
+                }
+            }
+        } catch (et: TransactionException) {
+            return AgentResponse<TSourceTypeCheckStatus>().also {
+                it.code = AgentCode.FAIL
+                it.agentMsg = et.message
+                it.agentCode = "${et.code()}"
+                it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+                    this.remark = et.message
+                })
+            }
+        }
+
+    }
+
+    override fun queryCheckFile(checkStatus: TSourceTypeCheckStatus?): AgentResponse<TSourceTypeCheckStatus> {
+        return AgentResponse<TSourceTypeCheckStatus>().also {
+            it.code = AgentCode.SUCCESS
+            it.agentMsg = "OK"
+            it.payload = checkStatus
+        }
+    }
+
+    override fun downloadCheckFile(checkStatus: TSourceTypeCheckStatus?): AgentResponse<TSourceTypeCheckStatus> {
+        return AgentResponse<TSourceTypeCheckStatus>().also {
+            it.code = AgentCode.SUCCESS
+            it.agentMsg = "OK"
+            it.payload = checkStatus
+        }
+    }
+
+    private fun reinitCheckFile(chkfile: TTransactionChkfile): TTransactionChkfile {
+        transactionReconciliationService.deleteTransactionChkdtls(chkfile.id) //删除明细
+        return transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile.apply {
+            this.status = ConstantUtil.CHKFILE_STATUS_INIT
+            this.result = ConstantUtil.CHKFILE_RESULT_NONE
+            this.remark = null
+            this.othercnt = 0
+            this.otheramt = 0.00
+            this.localcnt = 0
+            this.localamt = 0.00
+        }) //初始化chkfile
+    }
+
+    private fun successDownload(message: String, checkStatus: TSourceTypeCheckStatus): AgentResponse<TSourceTypeCheckStatus> {
+        return AgentResponse<TSourceTypeCheckStatus>().also {
+            it.code = AgentCode.SUCCESS
+            it.agentMsg = message
+            it.payload = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus.apply {
+                this.checkFileOk = true
+                this.remark = message
+            })
+        }
+    }
+
+}
\ No newline at end of file
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 1fda9f0..17d1d2e 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
@@ -48,6 +48,7 @@
                     .exception(undeclared.code(), undeclared, "业务处理错误"))
         }
 
+        ex.printStackTrace()
         return ResponseEntity.ok().body(ResponseBodyBuilder.create()
                 .exception(TradeErrorCode.BUSINESS_DEAL_ERROR, undeclared, "业务处理报错"))
     }
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 16ceadb..c9a6945 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
@@ -983,4 +983,37 @@
                 .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
     }
 
+    /**
+     * 直接调第三方查询流水结果 (方便测试)
+     * */
+    @PostMapping("/thirdquery")
+    fun thirdToQueryResult(refno: String): ResponseEntity<Any> {
+        consumePayService.getTransactionMainDtl(refno, null, null)?.let {
+            agentQueryResultTask.queryResult(it, 0)
+            return ResponseEntity.ok(
+                ResponseBodyBuilder.create()
+                    .success("已成功进入查询异步查询队列")
+            )
+        } ?: return ResponseEntity.ok(
+            ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")
+        )
+    }
+
+    /**
+     * ============================================================================
+     *                           农商行网关快捷支付【第三方开放能力】
+     * ============================================================================
+     * */
+    @PostMapping("/ynrccpay/thirdAuth")
+    fun ynrccPayThirdAuth(@Valid @RequestBody param: YnrccPayThirdAuthParam): ResponseEntity<Any> {
+        val ret = ynrccNetPayBusinessService.doYnrccPayThirdAuth(param.thirdservice,param.bankcardno,param.userid)
+        return if (ret.retcode == 0) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success(ret, "成功"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(ret.retcode, ret.retmsg))
+        }
+    }
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index 1c6750c..8d8fb8f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -2,7 +2,6 @@
 
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import com.supwisdom.dlpay.agent.service.CitizencardPayService
-import com.supwisdom.dlpay.agent.service.YnrccNetPayService
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.api.service.*
@@ -13,9 +12,11 @@
 import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.system.bean.LevelBean
 import com.supwisdom.dlpay.system.service.PointsService
+import com.supwisdom.dlpay.system.service.UserMessageService
 import org.apache.commons.beanutils.BeanUtils
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
+import org.springframework.validation.annotation.Validated
 import org.springframework.web.bind.annotation.*
 import java.net.URLDecoder
 import javax.validation.Valid
@@ -41,6 +42,8 @@
     private lateinit var qrcodeService: QRCodeService
     @Autowired
     private lateinit var ynrccNetPayBusinessService: YnrccNetPayBusinessService
+    @Autowired
+    private lateinit var userMessageService: UserMessageService
 
     @PostMapping("/open")
     fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity<Any> {
@@ -447,6 +450,26 @@
     }
 
     /**
+     * 查询用户消息
+     * */
+    @PostMapping("/queryMessage")
+    fun queryUserMessage(@Valid @RequestBody param: UserQueryMessageParam): ResponseEntity<Any> {
+        val userid = param.userid ?: throw RequestParamCheckException("用户ID不能为空")
+        val pageNo = param.pageNo ?: 1
+        val pageSize = param.pageSize ?: 10
+        val page = userMessageService.queryMessageByUserid(userid, pageNo, pageSize)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+            .success(UserQueryMessageResponse().apply {
+                this.pageNo = page.pageNo
+                this.pageSize = page.pageSize
+                this.totalCount = page.totalCount
+                this.totalPages = page.totalPages
+                this.data = page.data
+            }, "success")
+        )
+    }
+
+    /**
      * ============================================================================
      *                           农商行快捷支付【签约状态查询】
      * ============================================================================
@@ -460,14 +483,36 @@
 
     /**
      * ============================================================================
+     *                           农商行快捷支付【签约列表查询】
+     * ============================================================================
+     * */
+    @PostMapping("/ynrccpaySignList")
+    fun queryYnrccPaySignList(@Valid @RequestBody param: YnrccPaySignListQueryParam): ResponseEntity<Any> {
+        val resp = ynrccNetPayBusinessService.doQueryYnrccPaySignList(param.userid, param.bankcardno)
+        return if (0 == resp.retcode) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success(resp, "success"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(resp.retcode, resp.retmsg))
+        }
+    }
+
+    /**
+     * ============================================================================
      *                           农商行快捷支付【签约申请】
      * ============================================================================
      * */
     @PostMapping("/ynrccpaySignApply")
     fun applyYnrccPaySign(@Valid @RequestBody param: YnrccPaySignApplyParam): ResponseEntity<Any> {
         val resp = ynrccNetPayBusinessService.applyUserYnrccPaySign(param)
-        return ResponseEntity.ok(ResponseBodyBuilder.create()
+        return if (0 == resp.retcode) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
                 .success(resp, "success"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(resp.retcode, resp.retmsg))
+        }
     }
 
     /**
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_netpay_business_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_netpay_business_service.kt
index 61e590b..da5f5ac 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_netpay_business_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_netpay_business_service.kt
@@ -1,10 +1,13 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.csii.ynrcc.open.api.service.User
+import com.csii.ynrcc.open.api.service.YNRCCOpenServiceApi
 import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.AgentResponse
 import com.supwisdom.dlpay.agent.DtlStatus
 import com.supwisdom.dlpay.agent.citizencard.YnrccRespCode
 import com.supwisdom.dlpay.agent.service.YnrccNetPayService
+import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayResp
 import com.supwisdom.dlpay.agent.ynrccpay.YnrccPayUtil
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.dao.CardDao
@@ -28,6 +31,7 @@
 import com.supwisdom.dlpay.util.ConstantUtil
 import mu.KotlinLogging
 import org.springframework.stereotype.Service
+import java.util.ArrayList
 
 @Service
 class YnrccNetPayBusinessServiceImpl(val personDao: PersonDao,
@@ -42,6 +46,7 @@
     private val logger = KotlinLogging.logger { }
 
     override fun checkUserYnrccPaySignStatus(userid: String, bankcardno: String, shopaccno: String): Boolean {
+        logger.info("查询签约状态:userid=[$userid],bankcardno=[$bankcardno],shopaccno=[$shopaccno]")
         val person = personDao.findByUserid(userid)
                 ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户<$userid>不存在")
         val shopacc = shopaccDao.findByShopaccno(shopaccno)
@@ -60,21 +65,26 @@
     }
 
     override fun applyUserYnrccPaySign(param: YnrccPaySignApplyParam): YnrccPaySignApplyResponse {
+        logger.info("申请签约参数:" + YnrccPayUtil.toJson(param))
+        val resp = YnrccPaySignApplyResponse()
         val person = personDao.findByUserid(param.userid?.trim())
                 ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户<${param.userid}>不存在")
         val shopacc = shopaccDao.findByShopaccno(param.shopaccno?.trim())
                 ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<${param.shopaccno}>不存在")
         val bankCard = cardDao.findCardByCardnoAndCardtype(param.bankcardno.trim(), ConstantUtil.CARDTYPE_BANKCARD)
         if (null != bankCard && person.userid != bankCard.userid) {
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "银行卡持有人错误!")
+            resp.retcode = 99
+            resp.retmsg = "银行卡持有人错误!"
+            return resp
         }
         val idType = IDTypes.findByValue(person.idtype)
         if (idType < 0) {
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "证件类型未识别[${person.idtype}]!")
+            resp.retcode = 99
+            resp.retmsg = "证件类型未识别[${person.idtype}]!"
+            return resp
         }
         sourceTypeService.checkShopSourceType(shopacc.shopaccno, TradeDict.PAYTYPE_YNRCC_PAY, false)
 
-        val isAuthSign = ynrccPaySignDao.countByBankcardnoAndSignStatus(param.bankcardno, shopacc.shopaccno) > 0
         var userSign = ynrccPaySignDao.getUserSign(param.bankcardno, shopacc.shopaccno) ?: TYnrccPaySign().apply {
             this.bankcardno = param.bankcardno.trim()
             this.shopaccno = shopacc.shopaccno
@@ -84,20 +94,38 @@
             this.createtime = systemUtilService.sysdatetime.hostdatetime
         }
         if (person.userid != userSign.userid) {
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "银行卡持有人不匹配!")
+            resp.retcode = 99
+            resp.retmsg = "银行卡持有人不匹配!"
+            return resp
         } else if (userSign.isSignFlag) {
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该卡已签约!")
+            resp.retcode = 99
+            resp.retmsg = "该卡已签约!"
+            return resp
         }
+
+        var isAuthSign = false
+        var signDataResp = YnrccPayResp()
+        val existSigns = ynrccPaySignDao.queryOtherShopSign(param.bankcardno, shopacc.shopaccno)
+        if (null != existSigns && existSigns.size > 0) {
+            //已签约过,则是授权签约
+            logger.info("进入授权签约申请!")
+            isAuthSign = true
+            val oldCustomerSignNo = existSigns[0].customerSignNo
+            signDataResp = ynrccNetPayService.doApplyAuthYnrccPaySign(shopacc.shopaccno, oldCustomerSignNo) //授权签约
+        } else {
+            //首次签约
+            signDataResp = ynrccNetPayService.doApplyYnrccPaySign(shopacc.shopaccno) //初次签约
+        }
+        if (YnrccPayUtil.SUCCESS != signDataResp.code) {
+            resp.retcode = 99
+            resp.retmsg = signDataResp.message
+            return resp
+        }
+
         if (StringUtil.isEmpty(userSign.id)) {
             ynrccPaySignDao.save(userSign) //新创建的保存申请记录
         }
 
-        val signDataResp = ynrccNetPayService.doApplyYnrccPaySign(shopacc.shopaccno)
-        if (YnrccPayUtil.SUCCESS != signDataResp.code) {
-            throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, signDataResp.message)
-        }
-
-        val resp = YnrccPaySignApplyResponse()
         resp.retcode = 0
         resp.retmsg = "success"
         resp.signNo = userSign.id
@@ -115,6 +143,7 @@
     }
 
     override fun confirmUserYnrccPaySign(param: YnrccPaySignConfirmParam): YnrccPaySignConfirmResponse {
+        logger.info("确认签约参数:" + YnrccPayUtil.toJson(param))
         val userSign = ynrccPaySignDao.getById(param.signNo.toString())
                 ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "签约申请记录<${param.signNo}>不存在!")
 
@@ -129,9 +158,10 @@
         }
 
         //签约成功
-        if (data["CustomerAcNo"] != userSign.bankcardno) {
-            throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "支付账号与签约号不匹配!")
-        } else if (userSign.isSignFlag && data["CustomerSignNo"] != userSign.customerSignNo) {
+//        if (data["CustomerAcNo"] != userSign.bankcardno) {
+//            throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "支付账号与签约号不匹配!")  // CustomerAcNo 是脱敏返回的,不判断。 6210****6743
+//        }
+        if (userSign.isSignFlag && data["CustomerSignNo"] != userSign.customerSignNo) {
             throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "用户已签约且快捷支付协议号不一致!")
         }
 
@@ -151,6 +181,7 @@
     }
 
     override fun cancelUserYnrccPaySign(param: YnrccPaySignCancelParam): YnrccPaySignCancelResponse {
+        logger.info("申请解约参数:" + YnrccPayUtil.toJson(param))
         val userSign = ynrccPaySignDao.getUserSign(param.bankcardno.trim(), param.shopaccno)
                 ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "签约记录不存在或已解约!")
         if (userSign.userid != param.userid) {
@@ -196,7 +227,8 @@
         val refno = transdtl.refno
         val shopaccno = transdtl.shopDtl.shopaccno
         val amount = MoneyUtil.YuanToFen(transdtl.shopDtl.amount)
-        val transDateTime = "${transdtl.shopDtl.transdate}${transdtl.shopDtl.transtime}"
+        val hosttime = systemUtilService.sysdatetime.hosttime
+        val transDateTime = "${transdtl.shopDtl.accdate}$hosttime" //下单日期(记账日期,退款时用到)+下单时间
         val billno = transdtl.outTradeNo //billno放附加信息
         val productInfo = "农商行网关快捷支付[${transdtl.shopDtl.transdesc}]"; //商品描述
         val person = personDao.findByUserid(userSign.userid)
@@ -222,6 +254,7 @@
     }
 
     override fun doYnrccPayConfirm(transaction: TTransactionMain, plain: String, signature: String): AgentResponse<DtlStatus> {
+        logger.info("支付确认参数: refno=[${transaction.refno}],plain=[$plain],signature=[$signature]")
         if (TradeDict.DTL_STATUS_SUCCESS == transaction.status) {
             throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水已入账!")
         }
@@ -252,5 +285,64 @@
         }
     }
 
+    override fun doQueryYnrccPaySignList(userid: String?, bankcardno: String?): YnrccPaySignListQueryResponse {
+        val resp = YnrccPaySignListQueryResponse()
+        val signList = when (userid.isNullOrBlank()) {
+            true -> ynrccPaySignDao.queryActiveSignsByBankcardno(bankcardno?.trim())
+            false -> when (bankcardno.isNullOrBlank()) {
+                true -> ynrccPaySignDao.queryActiveSignsByUserid(userid?.trim())
+                false -> ynrccPaySignDao.queryActiveSignsByUseridAndBankcardno(userid?.trim(), bankcardno?.trim())
+            }
+        }
+        if (signList.isNullOrEmpty()) {
+            resp.retcode = 99
+            resp.retmsg = "无签约信息"
+            return resp
+        }
 
+        val data = ArrayList<YnrccPaySignInfo>()
+        for (sign in signList) {
+            data.add(YnrccPaySignInfo().apply {
+                this.signNo = sign.id
+                this.bankcardno = sign.bankcardno
+                this.shopaccno = sign.shopaccno
+                this.shopname = shopaccDao.getByShopaccno(sign.shopaccno)?.shopname ?: ""
+                this.signtime = sign.signTime
+                this.userid = sign.userid
+            })
+        }
+
+        resp.retcode = 0
+        resp.retmsg = "success"
+        resp.data = data
+        return resp
+    }
+
+    override fun doYnrccPayThirdAuth(thirdSrv: String, bankcardno: String, userid: String): YnrccPayThirdAuthResponse {
+        val resp = YnrccPayThirdAuthResponse()
+        resp.retcode = 99
+
+        //TODO: 根据第三方服务标识thirdSrv获取配置信息
+        val mchId = ""
+        val appId = ""
+        val token = ""
+        val pubKey = ""
+        val handler = YNRCCOpenServiceApi.getInstance(mchId, appId, token, pubKey)
+
+        //获取客户端sdk配置信息
+        val sdkConfigData = handler.getSDKConfigData()
+
+        //获取客户端SDK访问开放服务所需参数
+        val person = personDao.findByUserid(userid)
+            ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户不存在!")
+        //TODO: 判断bankcard是否该userid所有
+        val user = User(person.name, person.idno, person.mobile, bankcardno)
+        val access2ServiceData = handler.getAccess2ServiceData(user)
+
+        resp.retcode = 0
+        resp.retmsg = "success"
+        resp.sdkConfigData = sdkConfigData
+        resp.access2ServiceData = access2ServiceData
+        return resp
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/ynrcc_netpay_business_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/ynrcc_netpay_business_service.kt
index ad3527c..aa2ddec 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/ynrcc_netpay_business_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/ynrcc_netpay_business_service.kt
@@ -28,4 +28,10 @@
 
     @Transactional(rollbackFor = [Exception::class])
     fun doYnrccPayConfirm(transaction: TTransactionMain, plain: String, signature: String): AgentResponse<DtlStatus>
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun doQueryYnrccPaySignList(userid: String?, bankcardno: String?): YnrccPaySignListQueryResponse
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun doYnrccPayThirdAuth(thirdSrv: String, bankcardno: String, userid: String): YnrccPayThirdAuthResponse
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt
index 6429383..a55845f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt
@@ -1,13 +1,8 @@
 package com.supwisdom.dlpay.framework.controller
 
-import com.google.gson.Gson
 import com.jcabi.manifests.Manifests
-import com.supwisdom.dlpay.agent.service.YnrccNetPayService
 import com.supwisdom.dlpay.api.bean.ApiVersionResponse
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.framework.util.DateUtil
-import com.supwisdom.dlpay.framework.util.RandomUtils
-import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.GetMapping
 import org.springframework.web.bind.annotation.RequestMapping
@@ -17,9 +12,6 @@
 @RestController
 @RequestMapping("/api/common")
 class AboutController {
-    @Autowired
-    private lateinit var ynrccNetPayService: YnrccNetPayService
-
     @GetMapping("/version")
     fun version(): ResponseEntity<Any> {
         return try {
@@ -32,31 +24,4 @@
                     .success(ApiVersionResponse("unknown")))
         }
     }
-
-    @GetMapping("/resttest")
-    fun test(): ResponseEntity<Any> {
-        return try {
-            val shopaccno="2000000013"
-            val transDateTime = DateUtil.getNow("yyyyMMddHHmmss")
-            val refno = transDateTime + RandomUtils.randomNumber(6)
-            val amount = 1
-            val productInfo = "农商行快捷支付测试"
-            val extData = refno
-            val custname = ""
-            val email=""
-            val customerSignNo="12345678"
-
-            val resp = ynrccNetPayService.doApplyYnrccPaySign(shopaccno)
-
-//            val resp = ynrccNetPayService.doYnrccPayInit(shopaccno,refno,amount,transDateTime,
-//            productInfo,extData,custname,email,customerSignNo);
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .success(Gson().toJson(resp)))
-        } catch (e: Exception) {
-            e.printStackTrace()
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .success(e.message ?: "error!"))
-        }
-    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/resources/payment_merchant.properties b/payapi/src/main/resources/payment_merchant.properties
index f07cdea..6a10fe5 100644
--- a/payapi/src/main/resources/payment_merchant.properties
+++ b/payapi/src/main/resources/payment_merchant.properties
@@ -1,11 +1,13 @@
 development=no
 # \u8BC1\u4E66\u8DEF\u5F84,\u5FC5\u987B\u6307\u5B9A\u670D\u52A1\u5668\u7AEF\u8BC1\u4E66\u5BB9\u5668\u7EDD\u5BF9\u8DEF\u5F84
-cafile=D:/ynrccpay/merchant.jks
+cafile=D:/ynrcc_test/merchant.jks
 # \u8BC1\u4E66\u5E93\u5BC6\u7801
 store_password=111111
 # \u7528\u4E8E\u5546\u6237\u7B7E\u540D\u7684\u79D8\u94A5\u522B\u540D
-key_alias=merchant_key
+#key_alias=merchant_key
+key_alias=ynrcc
 # \u79D8\u94A5\u5BC6\u7801
-key_password=881220
+#key_password=881220
+key_password=111111
 # \u9A8C\u7B7E\u79D8\u94A5\u522B\u540D
 alias_paygate=alias_paygate
\ No newline at end of file