对账表
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java
new file mode 100644
index 0000000..63058e8
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.api.dao;
+
+import com.supwisdom.dlpay.api.domain.TTransactionChkdtl;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransactionChkdtlDao extends JpaRepository<TTransactionChkdtl, String> {
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java
new file mode 100644
index 0000000..a42f8ad
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.api.dao;
+
+import com.supwisdom.dlpay.api.domain.TTransactionChkfile;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Service;
+
+@Service
+public interface TransactionChkfileDao extends JpaRepository<TTransactionChkfile, String> {
+
+  TTransactionChkfile getByAccdateAndSourcetype(String accdate, String sourcetype);
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java
new file mode 100644
index 0000000..d230036
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java
@@ -0,0 +1,179 @@
+package com.supwisdom.dlpay.api.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "TB_TRANSACTION_CHKDTL",
+    indexes = {@Index(name = "uk_transaction_chkdtl", unique = true, columnList = "accdate,sourcetype,seqno")})
+public class TTransactionChkdtl {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "ID", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "ACCDATE", nullable = false, length = 8)
+  private String accdate;
+
+  @Column(name = "SOURCETYPE", nullable = false, length = 20)
+  private String sourcetype;
+
+  @Column(name = "SEQNO", nullable = false, precision = 9)
+  private Integer seqno;
+
+  @Column(name = "AMOUNT", nullable = false, precision = 9, scale = 2)
+  private Double amount;
+
+  @Column(name = "THIRD_REFNO", nullable = false, length = 32)
+  private String thirdRefno; //第三方流水号
+
+  @Column(name = "LOCAL_REFNO", nullable = false, length = 32)
+  private String localRefno; //本地流水号
+
+  @Column(name = "THIRD_ACCDATE", nullable = false, length = 8)
+  private String thirdAccdate; //第三方记账日期
+
+  @Column(name = "THIRD_STATUS", length = 20)
+  private String thirdStatus; //第三方流水状态
+
+  @Column(name = "REMARK", length = 200)
+  private String remark;
+
+  @Column(name = "EXTDATA", length = 200)
+  private String extdata;
+
+  @Column(name = "CHKRESULT", nullable = false, length = 20)
+  private String chkresult;
+
+  @Column(name = "RESOLVED", nullable = false, length = 20)
+  private String resolved;
+
+  @Column(name = "LASTSAVED")
+  private Timestamp lastsaved;
+
+  @Column(name = "tenantid", length = 20)
+  private String tenantid = "";
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getAccdate() {
+    return accdate;
+  }
+
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
+
+  public String getSourcetype() {
+    return sourcetype;
+  }
+
+  public void setSourcetype(String sourcetype) {
+    this.sourcetype = sourcetype;
+  }
+
+  public Integer getSeqno() {
+    return seqno;
+  }
+
+  public void setSeqno(Integer seqno) {
+    this.seqno = seqno;
+  }
+
+  public Double getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Double amount) {
+    this.amount = amount;
+  }
+
+  public String getThirdRefno() {
+    return thirdRefno;
+  }
+
+  public void setThirdRefno(String thirdRefno) {
+    this.thirdRefno = thirdRefno;
+  }
+
+  public String getLocalRefno() {
+    return localRefno;
+  }
+
+  public void setLocalRefno(String localRefno) {
+    this.localRefno = localRefno;
+  }
+
+  public String getThirdAccdate() {
+    return thirdAccdate;
+  }
+
+  public void setThirdAccdate(String thirdAccdate) {
+    this.thirdAccdate = thirdAccdate;
+  }
+
+  public String getThirdStatus() {
+    return thirdStatus;
+  }
+
+  public void setThirdStatus(String thirdStatus) {
+    this.thirdStatus = thirdStatus;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getExtdata() {
+    return extdata;
+  }
+
+  public void setExtdata(String extdata) {
+    this.extdata = extdata;
+  }
+
+  public String getChkresult() {
+    return chkresult;
+  }
+
+  public void setChkresult(String chkresult) {
+    this.chkresult = chkresult;
+  }
+
+  public String getResolved() {
+    return resolved;
+  }
+
+  public void setResolved(String resolved) {
+    this.resolved = resolved;
+  }
+
+  public Timestamp getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(Timestamp lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+
+  public String getTenantid() {
+    return tenantid;
+  }
+
+  public void setTenantid(String tenantid) {
+    this.tenantid = tenantid;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java
new file mode 100644
index 0000000..2cdc0f4
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java
@@ -0,0 +1,135 @@
+package com.supwisdom.dlpay.api.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "TB_TRANSACTION_CHKFILE",
+    indexes = {@Index(name = "uk_transaction_chkfile", unique = true, columnList = "accdate,sourcetype,")})
+public class TTransactionChkfile {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "ID", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "ACCDATE", nullable = false, length = 8)
+  private String accdate;
+
+  @Column(name = "SOURCETYPE", nullable = false, length = 20)
+  private String sourcetype;
+
+  @Column(name = "STATUS", nullable = false, length = 20)
+  private String status;
+
+  @Column(name = "REMARK", length = 600)
+  private String remark;
+
+  @Column(name = "THIRDCNT", nullable = false, precision = 9)
+  private Integer thirdcnt;
+
+  @Column(name = "THIRDAMT", nullable = false, precision = 15, scale = 2)
+  private Double thirdamt;
+
+  @Column(name = "LOCALCNT", nullable = false, precision = 9)
+  private Integer localcnt;
+
+  @Column(name = "LOCALAMT", nullable = false, precision = 15, scale = 2)
+  private Double localamt;
+
+  @Column(name = "LASTSAVED")
+  private Timestamp lastsaved;
+
+  @Column(name = "tenantid", length = 20)
+  private String tenantid = "";
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getAccdate() {
+    return accdate;
+  }
+
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
+
+  public String getSourcetype() {
+    return sourcetype;
+  }
+
+  public void setSourcetype(String sourcetype) {
+    this.sourcetype = sourcetype;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public Integer getThirdcnt() {
+    return thirdcnt;
+  }
+
+  public void setThirdcnt(Integer thirdcnt) {
+    this.thirdcnt = thirdcnt;
+  }
+
+  public Double getThirdamt() {
+    return thirdamt;
+  }
+
+  public void setThirdamt(Double thirdamt) {
+    this.thirdamt = thirdamt;
+  }
+
+  public Integer getLocalcnt() {
+    return localcnt;
+  }
+
+  public void setLocalcnt(Integer localcnt) {
+    this.localcnt = localcnt;
+  }
+
+  public Double getLocalamt() {
+    return localamt;
+  }
+
+  public void setLocalamt(Double localamt) {
+    this.localamt = localamt;
+  }
+
+  public Timestamp getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(Timestamp lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+
+  public String getTenantid() {
+    return tenantid;
+  }
+
+  public void setTenantid(String tenantid) {
+    this.tenantid = tenantid;
+  }
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index d0e6f9c..7e2fb15 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -25,7 +25,10 @@
 import org.springframework.data.redis.repository.configuration.EnableRedisRepositories
 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
 import org.springframework.data.redis.serializer.StringRedisSerializer
+import org.springframework.http.client.ClientHttpRequestFactory
+import org.springframework.http.client.SimpleClientHttpRequestFactory
 import org.springframework.scheduling.annotation.EnableScheduling
+import org.springframework.web.client.RestTemplate
 
 
 @Configuration
@@ -74,6 +77,22 @@
     }
 }
 
+@Configuration
+class RestTemplateConfig {
+    @Bean
+    fun simpleClientHttpRequestFactory(): SimpleClientHttpRequestFactory {
+        val factory = SimpleClientHttpRequestFactory()
+        factory.setConnectTimeout(15000)
+        factory.setReadTimeout(5000)
+        return factory
+    }
+
+    @Bean
+    fun restTemplate(factory: SimpleClientHttpRequestFactory): RestTemplate {
+        return RestTemplate(factory)
+    }
+}
+
 
 @SpringBootApplication
 @EnableDiscoveryClient
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt
index 04683c0..e721a02 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt
@@ -2,14 +2,19 @@
 
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import com.supwisdom.dlpay.agent.service.CitizencardPayService
+import com.supwisdom.dlpay.api.service.SourceTypeService
+import com.supwisdom.dlpay.api.service.TransactionReconciliationService
 import com.supwisdom.dlpay.api.service.YnrccBusinessService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.DateUtil
+import com.supwisdom.dlpay.framework.util.TradeDict
 import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.SchedulerLock
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.scheduling.annotation.Scheduled
 import org.springframework.stereotype.Component
+import org.springframework.web.client.RestTemplate
+
 
 /**
  * 第三方对账任务
@@ -22,6 +27,12 @@
     private lateinit var ynrccBusinessService: YnrccBusinessService
     @Autowired
     private lateinit var citizencardPayService: CitizencardPayService
+    @Autowired
+    private lateinit var transactionReconciliationService: TransactionReconciliationService
+    @Autowired
+    private lateinit var sourceTypeService: SourceTypeService
+    @Autowired
+    private lateinit var restTemplate: RestTemplate
 
     private val logger = KotlinLogging.logger { }
 
@@ -39,9 +50,15 @@
             for (i in 1 until diffDays) {
                 val billDate = DateUtil.getNewDay(downloadLastdate, i) //要取对账单的日期
 
+                var chkfile = transactionReconciliationService.getTransactionChkfile(billDate, TradeDict.PAYTYPE_CITIZEN_CARD)
+                if (null != chkfile) {
+                    continue // 已经存在对账单
+                }
+
                 val resp = citizencardPayService.getChkfilename(billDate, null)
                 if (YnrccUtil.CODE_SUCCESS == resp.code) {
-                    val chkfilename = resp.filename
+                    val agentConfig = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+                    val agentUrl = agentConfig[YnrccUtil.YNRCC_ANGENT_URL] + "/download"
                     //根据filename 取文件数据
 
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
new file mode 100644
index 0000000..f334403
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.api.service.impl
+
+import com.supwisdom.dlpay.api.dao.TransactionChkdtlDao
+import com.supwisdom.dlpay.api.dao.TransactionChkfileDao
+import com.supwisdom.dlpay.api.domain.TTransactionChkfile
+import com.supwisdom.dlpay.api.service.TransactionReconciliationService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+@Service
+class TransactionReconciliationServiceImpl : TransactionReconciliationService {
+    @Autowired
+    private lateinit var transactionChkfileDao: TransactionChkfileDao
+    @Autowired
+    private lateinit var transactionChkdtlDao: TransactionChkdtlDao
+
+    override fun getTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile? {
+        return transactionChkfileDao.getByAccdateAndSourcetype(accdate, sourcetype)
+    }
+
+
+}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt
new file mode 100644
index 0000000..2171dee
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.api.service
+
+import com.supwisdom.dlpay.api.domain.TTransactionChkfile
+import org.springframework.transaction.annotation.Transactional
+
+interface TransactionReconciliationService {
+    @Transactional(rollbackFor = [Exception::class], readOnly = true)
+    fun getTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile?
+
+}
\ No newline at end of file