中间缴费参数存表
diff --git a/payapi/sql/update-210106.sql b/payapi/sql/update-210106.sql
index 45a6a77..513f317 100644
--- a/payapi/sql/update-210106.sql
+++ b/payapi/sql/update-210106.sql
@@ -36,4 +36,23 @@
 INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('27', '农商行网关支付商户名', NULL, 'ynrcc.netpay.Mer_IdName', 'f', 'ynrccpay', '{tenantid}');
 INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('28', '农商行网关支付回调地址', NULL, 'ynrcc.netpay.MerURL', 'f', 'ynrccpay', '{tenantid}');
 INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('25', '农商行网关支付地址', 'https://ebank.ynrcc.com/pweb/%s?LoginType=C&_locale=zh_CN&BankId=9999', 'ynrcc.netpay.URL', 't', 'ynrccpay', '{tenantid}');
+commit;
+
+CREATE TABLE tb_ynrccpay_thirdapp (
+  id varchar(32) NOT NULL,
+  mch_id varchar(20) NOT NULL,
+  mch_name varchar(200),
+  app_id varchar(60) NOT NULL,
+  token varchar(20) NOT NULL,
+  pubkey varchar(200) NOT NULL,
+  enable bool NOT NULL,
+  remark varchar(200)
+);
+ALTER TABLE tb_ynrccpay_thirdapp ADD CONSTRAINT tb_ynrccpay_thirdapp_pkey PRIMARY KEY (id);
+
+-- 测试环境或正式环境插入相应配置
+INSERT INTO "public"."tb_ynrccpay_thirdapp"("id", "mch_id", "mch_name", "app_id", "token", "pubkey", "enable", "remark")
+VALUES ('test', '1002010472001', '大理市信息化发展有限责任公司', '318D34955996AA035F3047939EA655FF', 'J6upjifWdQfRj3eh', '043AAF09775EC7EEEAAA2C66773F61BF18CE4D2DDDCBFFF43249113D849AD3FF4F8951889E8BF759EC80AF2EEA7473F9FEE97A7DE0B284FFD3312BD5021061F172', 't', '测试环境配置');
+--INSERT INTO "public"."tb_ynrccpay_thirdapp"("id", "mch_id", "mch_name", "app_id", "token", "pubkey", "enable", "remark")
+--VALUES ('dev', '1002010472001', '大理市信息化发展有限责任公司', '5FE60D156754432BAC1789AF35EEA592', 'Cg3Ue7mdkWv9g5mK', '0484D7043D24F3AC19E3F7CA03A166C2F813BCFE2141CB0E8559214A23E7A8DFDC9B4C1E9D9FBE9456621373652B145DDB91BD6DD484E8F04870560E7A16F5AB2C', 't', '生产环境配置');
 commit;
\ No newline at end of file
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
index 4b3ace3..dfe5630 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
@@ -32,4 +32,10 @@
   List<TCard> findCitizencardByCardphyidWithoutOldId(String cardphyid, String oldId);
 
   TCard getById(String id);
+
+  @Query("select count(t.id) from TCard t where t.status='normal' and t.cardtype='bankcard' and t.cardno=?1 ")
+  int countByBankCardNo(String bankcardno);
+
+  @Query("select count(t.id) from TCard t where t.status='normal' and t.cardtype='bankcard' and t.cardno=?1 and t.userid=?2 ")
+  int countByBankCardNoAndUserid(String bankcardno, String userid);
 }
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 adc6075..752bba4 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
@@ -28,4 +28,10 @@
 
   @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);
+
+  @Query("select count(t.id) from TYnrccPaySign t where t.bankcardno=?1 and t.status='normal' ")
+  int countByBankcardno(String bankcardno);
+
+  @Query("select count(t.id) from TYnrccPaySign t where t.bankcardno=?1 and t.userid=?2 and t.status='normal' ")
+  int countByBankcardnoAndUserid(String bankcardno, String userid);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPayThirdappDao.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPayThirdappDao.java
new file mode 100644
index 0000000..f20a8c4
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/dao/YnrccPayThirdappDao.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.citizencard.dao;
+
+import com.supwisdom.dlpay.citizencard.domain.TYnrccPayThirdapp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface YnrccPayThirdappDao extends JpaRepository<TYnrccPayThirdapp, String> {
+  @Query("from TYnrccPayThirdapp t where t.enable is true ")
+  List<TYnrccPayThirdapp> queryYnrccPayThirdConfig();
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/domain/TYnrccPayThirdapp.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/domain/TYnrccPayThirdapp.java
new file mode 100644
index 0000000..b4ef460
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/domain/TYnrccPayThirdapp.java
@@ -0,0 +1,118 @@
+package com.supwisdom.dlpay.citizencard.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * 大理农商行快捷支付第三方中间缴费业务
+ * 对接参数配置表
+ * */
+@Entity
+@Table(name = "TB_YNRCCPAY_THIRDAPP")
+public class TYnrccPayThirdapp {
+
+  @Id
+  @Column(name = "id", unique = true, nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "mch_id", nullable = false, length = 20)
+  private String mchId;
+
+  @Column(name = "mch_name", nullable = false, length = 200)
+  private String mchName;
+
+  @Column(name = "app_id", nullable = false, length = 60)
+  private String appId;
+
+  @Column(name = "token", nullable = false, length = 20)
+  private String token;
+
+  @Column(name = "pubkey", nullable = false, length = 200)
+  private String pubkey;
+
+  @Column(name = "enable", nullable = false, length = 20)
+  private boolean enable;
+
+  @Column(name = "remark", length = 200)
+  private String remark;
+
+  public TYnrccPayThirdapp() {
+  }
+
+  public TYnrccPayThirdapp(String id, String mchId, String mchName, String appId, String token, String pubkey, boolean enable, String remark) {
+    this.id = id;
+    this.mchId = mchId;
+    this.mchName = mchName;
+    this.appId = appId;
+    this.token = token;
+    this.pubkey = pubkey;
+    this.enable = enable;
+    this.remark = remark;
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getMchId() {
+    return mchId;
+  }
+
+  public void setMchId(String mchId) {
+    this.mchId = mchId;
+  }
+
+  public String getMchName() {
+    return mchName;
+  }
+
+  public void setMchName(String mchName) {
+    this.mchName = mchName;
+  }
+
+  public String getAppId() {
+    return appId;
+  }
+
+  public void setAppId(String appId) {
+    this.appId = appId;
+  }
+
+  public String getToken() {
+    return token;
+  }
+
+  public void setToken(String token) {
+    this.token = token;
+  }
+
+  public String getPubkey() {
+    return pubkey;
+  }
+
+  public void setPubkey(String pubkey) {
+    this.pubkey = pubkey;
+  }
+
+  public boolean isEnable() {
+    return enable;
+  }
+
+  public void setEnable(boolean enable) {
+    this.enable = enable;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+}
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 65f8145..bd6be6c 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
@@ -12,7 +12,6 @@
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.dao.CardDao
 import com.supwisdom.dlpay.api.dao.PersonDao
-import com.supwisdom.dlpay.api.dao.TransactionMainDao
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.api.service.SourceTypeService
@@ -20,6 +19,7 @@
 import com.supwisdom.dlpay.api.service.YnrccNetPayBusinessService
 import com.supwisdom.dlpay.api.types.IDTypes
 import com.supwisdom.dlpay.citizencard.dao.YnrccPaySignDao
+import com.supwisdom.dlpay.citizencard.dao.YnrccPayThirdappDao
 import com.supwisdom.dlpay.citizencard.domain.TYnrccPaySign
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.dao.ShopaccDao
@@ -38,7 +38,7 @@
                                      val shopaccDao: ShopaccDao,
                                      val ynrccPaySignDao: YnrccPaySignDao,
                                      val cardDao: CardDao,
-                                     val transactionMainDao: TransactionMainDao,
+                                     val ynrccPayThirdappDao: YnrccPayThirdappDao,
                                      val transactionService: TransactionService,
                                      val systemUtilService: SystemUtilService,
                                      val sourceTypeService: SourceTypeService,
@@ -323,23 +323,50 @@
     }
 
     override fun doYnrccPayThirdAuth(thirdSrv: String, bankcardno: String, userid: String): YnrccPayThirdAuthResponse {
+        logger.info("中间缴费请求参数:thirdSrv=[$thirdSrv],bankcardno=[$bankcardno],userid=[$userid]")
         val resp = YnrccPayThirdAuthResponse()
         resp.retcode = 99
 
-        //TODO: 根据第三方服务标识thirdSrv获取配置信息
-        val mchId = ""
-        val appId = ""
-        val token = ""
-        val pubKey = ""
-        val handler = YNRCCOpenServiceApi.getInstance(mchId, appId, token, pubKey)
+        val thirdConfs = ynrccPayThirdappDao.queryYnrccPayThirdConfig()
+        if (null == thirdConfs || thirdConfs.isEmpty()) {
+            resp.retcode = 99
+            resp.retmsg = "中间缴费对接参数未配置!"
+            return resp
+        } else if (thirdConfs.size != 1) {
+            resp.retcode = 99
+            resp.retmsg = "中间缴费对接参数未指定!"
+            return resp
+        }
 
+        val config = thirdConfs[0]  //获取配置信息(第三方服务标识thirdSrv暂时无用)
+        var handler = YNRCCOpenServiceApi.getInstance(config.mchId, config.appId, config.token, config.pubkey)
         //获取客户端sdk配置信息
         val sdkConfigData = handler.getSDKConfigData()
 
         //获取客户端SDK访问开放服务所需参数
         val person = personDao.findByUserid(userid)
             ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "用户不存在!")
-        //TODO: 判断bankcard是否该userid所有
+        if (person.mobile.isNullOrBlank()) {
+            resp.retcode = 99
+            resp.retmsg = "用户手机号为空!"
+            return resp
+        }
+        //fixme: 判断bankcard是否该userid所有
+        if (ynrccPaySignDao.countByBankcardno(bankcardno?.trim()) > 0) {
+            if (ynrccPaySignDao.countByBankcardnoAndUserid(bankcardno?.trim(), person.userid) < 1) {
+                resp.retcode = 99
+                resp.retmsg = "银行卡持有人错误!"
+                return resp
+            }
+        } else if (cardDao.countByBankCardNo(bankcardno?.trim()) > 0) {
+            if (cardDao.countByBankCardNoAndUserid(bankcardno?.trim(), person.userid) < 1) {
+                resp.retcode = 99
+                resp.retmsg = "银行卡持有人错误!"
+                return resp
+            }
+        }
+
+//        val user = User("测试", "420117198802234181", "13584821704", "623100095486551526")  //测试User
         val user = User(person.name, person.idno, person.mobile, bankcardno)
         val access2ServiceData = handler.getAccess2ServiceData(user)
 
@@ -354,6 +381,7 @@
         }
         resp.sdkConfigData = sdkConfigData
         resp.access2ServiceData = access2ServiceData
+        logger.info("中间缴费成功返回:" + YnrccPayUtil.toJson(resp))
         return resp
     }
 }
\ No newline at end of file