对账表
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